From e3291b0e2a7edf6f96bb435bee563d35a3c551fd Mon Sep 17 00:00:00 2001 From: liyuchun Date: Mon, 18 Oct 2021 09:07:11 +0800 Subject: [PATCH] * Fix bug #15541. --- module/group/model.php | 2 +- module/personnel/model.php | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/module/group/model.php b/module/group/model.php index dad6f5905c..af1eb74efc 100644 --- a/module/group/model.php +++ b/module/group/model.php @@ -375,7 +375,7 @@ class groupModel extends model $needRemoveAcls = array_diff($oldAcls, $newAcls); $needAddAcls = array_diff($newAcls, $oldAcls); foreach($needAddAcls as $objectID) $this->personnel->updateWhitelist($users, $objectType, $objectID, 'whitelist', 'sync', 'increase'); - foreach($needRemoveAcls as $objectID) $this->personnel->deleteWhitelist($users, $objectType, $objectID); + foreach($needRemoveAcls as $objectID) $this->personnel->deleteWhitelist($users, $objectType, $objectID, $groupID); } diff --git a/module/personnel/model.php b/module/personnel/model.php index 00e3cc5527..ccebd2a183 100644 --- a/module/personnel/model.php +++ b/module/personnel/model.php @@ -824,13 +824,27 @@ class personnelModel extends model * @param array $users * @param string $objectType * @param int $objectID + * @param int $groupID * @access public * @return void */ - public function deleteWhitelist($users = array(), $objectType = 'program', $objectID = 0) + public function deleteWhitelist($users = array(), $objectType = 'program', $objectID = 0, $groupID = 0) { + $this->loadModel('group'); + + /* Determine whether to delete the whitelist. */ foreach($users as $account) { + $groups = $this->group->getByAccount($account); + foreach($groups as $key => $group) + { + if($key == $groupID) continue; + + $acl = json_decode($group->acl); + $keyName = $objectType . 's'; + if(isset($acl->$keyName) and in_array($objectID, $acl->$keyName)) return false; + } + if($objectType == 'program') $this->deleteProgramWhitelist($objectID, $account); if($objectType == 'project') $this->deleteProjectWhitelist($objectID, $account); if($objectType == 'product') $this->deleteProductWhitelist($objectID, $account);