From 3dd51aab8d1bc62dbe26e81be840cf51318bb5f1 Mon Sep 17 00:00:00 2001 From: jennylee Date: Wed, 14 May 2014 17:11:05 -0400 Subject: [PATCH] BUG-14596 User with "PM_REASSIGNCASE" permission can not reassign cases to himself. This is new feature, now the user with the "PM_REASSIGNCASE" permission is showd in the list of users to reassign the case. --- .../engine/classes/model/RolesPermissions.php | 22 ++++++++++ workflow/engine/classes/class.case.php | 41 ++++++++++++++++--- 2 files changed, 57 insertions(+), 6 deletions(-) diff --git a/rbac/engine/classes/model/RolesPermissions.php b/rbac/engine/classes/model/RolesPermissions.php index f571c823e..276259921 100755 --- a/rbac/engine/classes/model/RolesPermissions.php +++ b/rbac/engine/classes/model/RolesPermissions.php @@ -92,6 +92,28 @@ class RolesPermissions extends BaseRolesPermissions return $this->permission_name; } + + /** + * @return string + */ + public function getPermissionsByRolUid($rolUid = '') + { + try { + $oCriteria = new Criteria('rbac'); + $oCriteria->add(RolesPermissionsPeer::ROL_UID, $rolUid); + $oDataset = RolesPermissionsPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $res = array(); + while ($oDataset->next()) { + $res[] = $aRow = $oDataset->getRow(); + } + return $res; + } + catch (Exception $oError) { + throw($oError); + } + } + /** * * @param string $name diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index ef56686d8..2cb513cf9 100755 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -6415,16 +6415,25 @@ class Cases { G::LoadClass('groups'); G::LoadClass('tasks'); + $r = new Roles(); + $rolPerm = new RolesPermissions(); + $perm = false; $oTasks = new Tasks(); $aAux = $oTasks->getGroupsOfTask($TAS_UID, 1); $row = array(); - $groups = new Groups(); foreach ($aAux as $aGroup) { $aUsers = $groups->getUsersOfGroup($aGroup['GRP_UID']); foreach ($aUsers as $aUser) { - if ($aUser['USR_UID'] != $USR_UID) { + $rol_perm = $r->loadByCode($aUser['USR_ROLE']); + $permissions = $rolPerm->getPermissionsByRolUid( $rol_perm['ROL_UID'] ); + foreach ($permissions as $permission){ + if ($permission['PER_UID'] == "00000000000000000000000000000007"){ + $perm = true; + } + } + if ($aUser['USR_UID'] != $USR_UID || $perm == true) { $row[] = $aUser['USR_UID']; } } @@ -6432,7 +6441,14 @@ class Cases $aAux = $oTasks->getUsersOfTask($TAS_UID, 1); foreach ($aAux as $aUser) { - if ($aUser['USR_UID'] != $USR_UID) { + $rol_perm = $r->loadByCode($aUser['USR_ROLE']); + $permissions = $rolPerm->getPermissionsByRolUid( $rol_perm['ROL_UID'] ); + foreach ($permissions as $permission){ + if ($permission['PER_UID'] == "00000000000000000000000000000007"){ + $perm = true; + } + } + if ($aUser['USR_UID'] != $USR_UID || $perm == true) { $row[] = $aUser['USR_UID']; } } @@ -6444,7 +6460,14 @@ class Cases foreach ($aAux as $aGroup) { $aUsers = $groups->getUsersOfGroup($aGroup['GRP_UID']); foreach ($aUsers as $aUser) { - if ($aUser['USR_UID'] != $USR_UID) { + $rol_perm = $r->loadByCode($aUser['USR_ROLE']); + $permissions = $rolPerm->getPermissionsByRolUid( $rol_perm['ROL_UID'] ); + foreach ($permissions as $permission){ + if ($permission['PER_UID'] == "00000000000000000000000000000007"){ + $perm = true; + } + } + if ($aUser['USR_UID'] != $USR_UID || $perm == true) { $row[] = $aUser['USR_UID']; } } @@ -6453,7 +6476,14 @@ class Cases // User Ad Hoc $aAux = $oTasks->getUsersOfTask($TAS_UID, 2); foreach ($aAux as $aUser) { - if ($aUser['USR_UID'] != $USR_UID) { + $rol_perm = $r->loadByCode($aUser['USR_ROLE']); + $permissions = $rolPerm->getPermissionsByRolUid( $rol_perm['ROL_UID'] ); + foreach ($permissions as $permission){ + if ($permission['PER_UID'] == "00000000000000000000000000000007"){ + $perm = true; + } + } + if ($aUser['USR_UID'] != $USR_UID || $perm == true) { $row[] = $aUser['USR_UID']; } } @@ -6527,7 +6557,6 @@ class Cases } } } - return $rows; }