From 3959695ad2593cce8899ee30c484f207315ef77d Mon Sep 17 00:00:00 2001 From: Neil Blakey-Milner Date: Fri, 3 Feb 2006 12:58:14 +0000 Subject: [PATCH] Override permissions based on the state of the document. --- lib/permissions/permissionutil.inc.php | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+), 0 deletions(-) diff --git a/lib/permissions/permissionutil.inc.php b/lib/permissions/permissionutil.inc.php index a39193d..30517d2 100644 --- a/lib/permissions/permissionutil.inc.php +++ b/lib/permissions/permissionutil.inc.php @@ -12,6 +12,8 @@ require_once(KT_LIB_DIR . "/permissions/permissiondynamiccondition.inc.php"); require_once(KT_LIB_DIR . "/groups/GroupUtil.php"); require_once(KT_LIB_DIR . "/roles/roleallocation.inc.php"); +require_once(KT_LIB_DIR . "/workflow/workflowstatepermissionsassignment.inc.php"); + class KTPermissionUtil { // {{{ generateDescriptor /** @@ -115,6 +117,15 @@ class KTPermissionUtil { } // }}} + // {{{ updatePermissionLookupForState + function updatePermissionLookupForState($oState) { + $aDocuments = Document::getByState($oState); + foreach ($aDocuments as $oDocument) { + KTPermissionUtil::updatePermissionLookup($oDocument); + } + } + // }}} + // {{{ updatePermissionLookupForPO /** * Updates permission lookups for all objects of a certain @@ -236,6 +247,26 @@ class KTPermissionUtil { } } + if (!is_a($oFolderOrDocument, 'Folder')) { + $oState = KTWorkflowUtil::getWorkflowStateForDocument($oFolderOrDocument); + $aWorkflowStatePermissionAssignments = KTWorkflowStatePermissionAssignment::getByState($oState); + foreach ($aWorkflowStatePermissionAssignments as $oAssignment) { + $iPermissionId = $oAssignment->getPermissionId(); + $iPermissionDescriptorId = $oAssignment->getDescriptorId(); + + $oPD = KTPermissionDescriptor::get($iPermissionDescriptorId); + $aGroupIDs = $oPD->getGroups(); + $aUserIDs = array(); + $aRoleIDs = $oPD->getRoles(); + $aAllowed = array( + "group" => $aGroupIDs, + "user" => $aUserIDs, + "role" => $aRoleIDs, + ); + $aMapPermAllowed[$iPermissionId] = $aAllowed; + } + } + // if we have roles: nearest folder. $iRoleSourceFolder = null; if (is_a($oFolderOrDocument, 'KTDocumentCore') || is_a($oFolderOrDocument, 'Document')) { $iRoleSourceFolder = $oFolderOrDocument->getFolderID(); } -- libgit2 0.21.4