Commit 08572d2ec497f3319d74de52111148fe89e145ca

Authored by Neil Blakey-Milner
1 parent 5be2067c

Allow for dynamic permissions - permissions that are available only if a

certain condition on a document is met, using a saved search/condition.


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@3973 c91229c3-7414-0410-bfa2-8a42b809f60b
presentation/lookAndFeel/knowledgeTree/foldermanagement/folderPermissions.php
@@ -14,6 +14,9 @@ require_once(KT_LIB_DIR . "/permissions/permissionobject.inc.php"); @@ -14,6 +14,9 @@ require_once(KT_LIB_DIR . "/permissions/permissionobject.inc.php");
14 require_once(KT_LIB_DIR . "/permissions/permissionassignment.inc.php"); 14 require_once(KT_LIB_DIR . "/permissions/permissionassignment.inc.php");
15 require_once(KT_LIB_DIR . "/permissions/permissiondescriptor.inc.php"); 15 require_once(KT_LIB_DIR . "/permissions/permissiondescriptor.inc.php");
16 require_once(KT_LIB_DIR . "/permissions/permissionutil.inc.php"); 16 require_once(KT_LIB_DIR . "/permissions/permissionutil.inc.php");
  17 +require_once(KT_LIB_DIR . "/permissions/permissiondynamiccondition.inc.php");
  18 +
  19 +require_once(KT_LIB_DIR . "/search/savedsearch.inc.php");
17 20
18 require_once(KT_LIB_DIR . "/dispatcher.inc.php"); 21 require_once(KT_LIB_DIR . "/dispatcher.inc.php");
19 $sectionName = "Manage Documents"; 22 $sectionName = "Manage Documents";
@@ -27,12 +30,12 @@ function displayFolderPathLink($aPathArray, $aPathNameArray, $sLinkPage = "") { @@ -27,12 +30,12 @@ function displayFolderPathLink($aPathArray, $aPathNameArray, $sLinkPage = "") {
27 $default->log->debug("displayFolderPathLink: slinkPage=$sLinkPage"); 30 $default->log->debug("displayFolderPathLink: slinkPage=$sLinkPage");
28 // display a separate link to each folder in the path 31 // display a separate link to each folder in the path
29 for ($i=0; $i<count($aPathArray); $i++) { 32 for ($i=0; $i<count($aPathArray); $i++) {
30 - $iFolderID = $aPathArray[$i]; 33 + $iFolderId = $aPathArray[$i];
31 // retrieve the folder name for this folder 34 // retrieve the folder name for this folder
32 $sFolderName = $aPathNameArray[$i]; 35 $sFolderName = $aPathNameArray[$i];
33 - // generate a link back to this page setting fFolderID 36 + // generate a link back to this page setting fFolderId
34 $sLink = generateLink($sLinkPage, 37 $sLink = generateLink($sLinkPage,
35 - "fBrowseType=folder&fFolderID=$iFolderID", 38 + "fBrowseType=folder&fFolderID=$iFolderId",
36 $sFolderName); 39 $sFolderName);
37 $sPathLinks = (strlen($sPathLinks) > 0) ? $sPathLinks . " > " . $sLink : $sLink; 40 $sPathLinks = (strlen($sPathLinks) > 0) ? $sPathLinks . " > " . $sLink : $sLink;
38 } 41 }
@@ -41,11 +44,19 @@ function displayFolderPathLink($aPathArray, $aPathNameArray, $sLinkPage = &quot;&quot;) { @@ -41,11 +44,19 @@ function displayFolderPathLink($aPathArray, $aPathNameArray, $sLinkPage = &quot;&quot;) {
41 44
42 45
43 class FolderPermissions extends KTStandardDispatcher { 46 class FolderPermissions extends KTStandardDispatcher {
  47 + var $bAutomaticTransaction = true;
  48 +
  49 + function check() {
  50 + if (KTUtil::arrayGet($_REQUEST, 'fFolderID')) {
  51 + $_REQUEST['fFolderId'] = $_REQUEST['fFolderID'];
  52 + }
  53 + $this->oFolder =& $this->oValidator->validateFolder($_REQUEST['fFolderId']);
  54 + return true;
  55 + }
44 function do_main() { 56 function do_main() {
45 $oTemplating = new KTTemplating; 57 $oTemplating = new KTTemplating;
46 - $oTemplate = $oTemplating->loadTemplate("ktcore/manage_folder_permissions");  
47 - $oFolder = Folder::get($_REQUEST['fFolderID']);  
48 - $oPO = KTPermissionObject::get($oFolder->getPermissionObjectID()); 58 + $oTemplate = $oTemplating->loadTemplate("ktcore/folder/permissions");
  59 + $oPO = KTPermissionObject::get($this->oFolder->getPermissionObjectId());
49 $aPermissions = KTPermission::getList(); 60 $aPermissions = KTPermission::getList();
50 $aMapPermissionGroup = array(); 61 $aMapPermissionGroup = array();
51 foreach ($aPermissions as $oPermission) { 62 foreach ($aPermissions as $oPermission) {
@@ -53,45 +64,48 @@ class FolderPermissions extends KTStandardDispatcher { @@ -53,45 +64,48 @@ class FolderPermissions extends KTStandardDispatcher {
53 if (PEAR::isError($oPA)) { 64 if (PEAR::isError($oPA)) {
54 continue; 65 continue;
55 } 66 }
56 - $oDescriptor = KTPermissionDescriptor::get($oPA->getPermissionDescriptorID());  
57 - $iPermissionID = $oPermission->getID();  
58 - $aIDs = $oDescriptor->getGroups();  
59 - $aMapPermissionGroup[$iPermissionID] = array();  
60 - foreach ($aIDs as $iID) {  
61 - $aMapPermissionGroup[$iPermissionID][$iID] = true; 67 + $oDescriptor = KTPermissionDescriptor::get($oPA->getPermissionDescriptorId());
  68 + $iPermissionId = $oPermission->getId();
  69 + $aIds = $oDescriptor->getGroups();
  70 + $aMapPermissionGroup[$iPermissionId] = array();
  71 + foreach ($aIds as $iId) {
  72 + $aMapPermissionGroup[$iPermissionId][$iId] = true;
62 } 73 }
63 } 74 }
64 $aMapPermissionUser = array(); 75 $aMapPermissionUser = array();
65 $aUsers = User::getList(); 76 $aUsers = User::getList();
66 foreach ($aPermissions as $oPermission) { 77 foreach ($aPermissions as $oPermission) {
67 - $iPermissionID = $oPermission->getID(); 78 + $iPermissionId = $oPermission->getId();
68 foreach ($aUsers as $oUser) { 79 foreach ($aUsers as $oUser) {
69 - if (KTPermissionUtil::userHasPermissionOnItem($oUser, $oPermission, $oFolder)) {  
70 - $aMapPermissionUser[$iPermissionID][$oUser->getID()] = true; 80 + if (KTPermissionUtil::userHasPermissionOnItem($oUser, $oPermission, $this->oFolder)) {
  81 + $aMapPermissionUser[$iPermissionId][$oUser->getId()] = true;
71 } 82 }
72 } 83 }
73 } 84 }
74 85
75 $oInherited = KTPermissionUtil::findRootObjectForPermissionObject($oPO); 86 $oInherited = KTPermissionUtil::findRootObjectForPermissionObject($oPO);
76 - if ($oInherited === $oFolder) { 87 + if ($oInherited === $this->oFolder) {
77 $bEdit = true; 88 $bEdit = true;
78 } else { 89 } else {
79 - $iInheritedFolderID = $oInherited->getID();  
80 - $sInherited = displayFolderPathLink(Folder::getFolderPathAsArray($iInheritedFolderID),  
81 - Folder::getFolderPathNamesAsArray($iInheritedFolderID), 90 + $iInheritedFolderId = $oInherited->getId();
  91 + $sInherited = displayFolderPathLink(Folder::getFolderPathAsArray($iInheritedFolderId),
  92 + Folder::getFolderPathNamesAsArray($iInheritedFolderId),
82 "$default->rootUrl/control.php?action=editFolderPermissions"); 93 "$default->rootUrl/control.php?action=editFolderPermissions");
83 $bEdit = false; 94 $bEdit = false;
84 } 95 }
85 96
  97 + $aDynamicConditions = KTPermissionDynamicCondition::getByPermissionObject($oPO);
86 $aTemplateData = array( 98 $aTemplateData = array(
87 "permissions" => $aPermissions, 99 "permissions" => $aPermissions,
88 "groups" => Group::getList(), 100 "groups" => Group::getList(),
89 - "iFolderID" => $_REQUEST['fFolderID'], 101 + "iFolderId" => $this->oFolder->getId(),
90 "aMapPermissionGroup" => $aMapPermissionGroup, 102 "aMapPermissionGroup" => $aMapPermissionGroup,
91 "users" => $aUsers, 103 "users" => $aUsers,
92 "aMapPermissionUser" => $aMapPermissionUser, 104 "aMapPermissionUser" => $aMapPermissionUser,
93 "edit" => $bEdit, 105 "edit" => $bEdit,
94 "inherited" => $sInherited, 106 "inherited" => $sInherited,
  107 + "conditions" => KTSavedSearch::getConditions(),
  108 + "dynamic_conditions" => $aDynamicConditions,
95 ); 109 );
96 return $oTemplate->render($aTemplateData); 110 return $oTemplate->render($aTemplateData);
97 } 111 }
@@ -104,35 +118,50 @@ class FolderPermissions extends KTStandardDispatcher { @@ -104,35 +118,50 @@ class FolderPermissions extends KTStandardDispatcher {
104 } 118 }
105 119
106 function do_update() { 120 function do_update() {
107 - $oFolder = Folder::get($_REQUEST['fFolderID']);  
108 - $oPO = KTPermissionObject::get($oFolder->getPermissionObjectID()); 121 + $oPO = KTPermissionObject::get($this->oFolder->getPermissionObjectId());
109 $aFoo = $_REQUEST['foo']; 122 $aFoo = $_REQUEST['foo'];
110 $aPermissions = KTPermission::getList(); 123 $aPermissions = KTPermission::getList();
111 foreach ($aPermissions as $oPermission) { 124 foreach ($aPermissions as $oPermission) {
112 - $iPermID = $oPermission->getID();  
113 - $aAllowed = KTUtil::arrayGet($aFoo, $iPermID, array());  
114 - KTPermissionUtil::setPermissionForID($oPermission, $oPO, $aAllowed); 125 + $iPermId = $oPermission->getId();
  126 + $aAllowed = KTUtil::arrayGet($aFoo, $iPermId, array());
  127 + KTPermissionUtil::setPermissionForId($oPermission, $oPO, $aAllowed);
115 } 128 }
116 KTPermissionUtil::updatePermissionLookupForPO($oPO); 129 KTPermissionUtil::updatePermissionLookupForPO($oPO);
117 - return $this->errorRedirectToMain('Permissions updated',  
118 - array('fFolderID' => $oFolder->getID())); 130 + return $this->successRedirectToMain('Permissions updated',
  131 + array('fFolderId' => $this->oFolder->getId()));
119 } 132 }
120 133
121 function do_copyPermissions() { 134 function do_copyPermissions() {
122 - $oFolder = Folder::get($_REQUEST['fFolderID']);  
123 - KTPermissionUtil::copyPermissionObject($oFolder);  
124 - return $this->errorRedirectToMain('Permissions updated',  
125 - array('fFolderID' => $oFolder->getID())); 135 + KTPermissionUtil::copyPermissionObject($this->oFolder);
  136 + return $this->successRedirectToMain('Permissions updated',
  137 + array('fFolderId' => $oFolder->getId()));
126 } 138 }
127 139
128 function do_inheritPermissions() { 140 function do_inheritPermissions() {
129 - $oFolder = Folder::get($_REQUEST['fFolderID']);  
130 - KTPermissionUtil::inheritPermissionObject($oFolder);  
131 - return $this->errorRedirectToMain('Permissions updated',  
132 - array('fFolderID' => $oFolder->getID())); 141 + KTPermissionUtil::inheritPermissionObject($this->oFolder);
  142 + return $this->successRedirectToMain('Permissions updated',
  143 + array('fFolderId' => $this->oFolder->getId()));
133 } 144 }
134 145
135 - 146 + function do_newDynamicPermission() {
  147 + $oGroup =& $this->oValidator->validateGroup($_REQUEST['fGroupId']);
  148 + $oCondition =& $this->oValidator->validateCondition($_REQUEST['fConditionId']);
  149 + $aPermissionIds = $_REQUEST['fPermissionIds'];
  150 + $oPO = KTPermissionObject::get($this->oFolder->getPermissionObjectId());
  151 +
  152 + $oDynamicCondition = KTPermissionDynamicCondition::createFromArray(array(
  153 + 'groupid' => $oGroup->getId(),
  154 + 'conditionid' => $oCondition->getId(),
  155 + 'permissionobjectid' => $oPO->getId(),
  156 + ));
  157 + $aOptions = array(
  158 + 'redirect_to' => array('main', 'fFolderId=' . $this->oFolder->getId()),
  159 + );
  160 + $this->oValidator->notError($oDynamicCondition, $aOptions);
  161 + $res = $oDynamicCondition->saveAssignment($aPermissionIds);
  162 + $this->oValidator->notError($res, $aOptions);
  163 + $this->successRedirectToMain("Dynamic permission added", "fFolderId=" . $this->oFolder->getId());
  164 + }
136 } 165 }
137 166
138 $oDispatcher = new FolderPermissions; 167 $oDispatcher = new FolderPermissions;