Commit 9f61ed5a44a06aece4e26ed6afb82ae28ab8a4ea
1 parent
4f4d266e
Add a mechanism to view permissions applicable to a document.
git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@3649 c91229c3-7414-0410-bfa2-8a42b809f60b
Showing
2 changed files
with
290 additions
and
0 deletions
presentation/lookAndFeel/knowledgeTree/documentmanagement/documentPermissions.php
0 → 100644
| 1 | +<?php | |
| 2 | + | |
| 3 | +require_once("../../../../config/dmsDefaults.php"); | |
| 4 | + | |
| 5 | +require_once(KT_DIR . "/presentation/Html.inc"); | |
| 6 | + | |
| 7 | +require_once(KT_LIB_DIR . "/templating/templating.inc.php"); | |
| 8 | +require_once(KT_LIB_DIR . "/permissions/permission.inc.php"); | |
| 9 | +require_once(KT_LIB_DIR . "/foldermanagement/Folder.inc"); | |
| 10 | +require_once(KT_LIB_DIR . "/groups/Group.inc"); | |
| 11 | + | |
| 12 | +require_once(KT_LIB_DIR . "/permissions/permission.inc.php"); | |
| 13 | +require_once(KT_LIB_DIR . "/permissions/permissionobject.inc.php"); | |
| 14 | +require_once(KT_LIB_DIR . "/permissions/permissionassignment.inc.php"); | |
| 15 | +require_once(KT_LIB_DIR . "/permissions/permissiondescriptor.inc.php"); | |
| 16 | +require_once(KT_LIB_DIR . "/permissions/permissionutil.inc.php"); | |
| 17 | + | |
| 18 | +require_once(KT_LIB_DIR . "/dispatcher.inc.php"); | |
| 19 | +$sectionName = "Manage Documents"; | |
| 20 | +require_once(KT_DIR . "/presentation/webpageTemplate.inc"); | |
| 21 | + | |
| 22 | +function displayFolderPathLink($aPathArray, $aPathNameArray, $sLinkPage = "") { | |
| 23 | + global $default; | |
| 24 | + if (strlen($sLinkPage) == 0) { | |
| 25 | + $sLinkPage = $_SERVER["PHP_SELF"]; | |
| 26 | + } | |
| 27 | + $default->log->debug("displayFolderPathLink: slinkPage=$sLinkPage"); | |
| 28 | + // display a separate link to each folder in the path | |
| 29 | + for ($i=0; $i<count($aPathArray); $i++) { | |
| 30 | + $iFolderID = $aPathArray[$i]; | |
| 31 | + // retrieve the folder name for this folder | |
| 32 | + $sFolderName = $aPathNameArray[$i]; | |
| 33 | + // generate a link back to this page setting fFolderID | |
| 34 | + $sLink = generateLink($sLinkPage, | |
| 35 | + "fBrowseType=folder&fFolderID=$iFolderID", | |
| 36 | + $sFolderName); | |
| 37 | + $sPathLinks = (strlen($sPathLinks) > 0) ? $sPathLinks . " > " . $sLink : $sLink; | |
| 38 | + } | |
| 39 | + return $sPathLinks; | |
| 40 | +} | |
| 41 | + | |
| 42 | + | |
| 43 | +class DocumentPermissionsDispatcher extends KTStandardDispatcher { | |
| 44 | + function do_main() { | |
| 45 | + $oTemplating = new KTTemplating; | |
| 46 | + $oTemplate = $oTemplating->loadTemplate("ktcore/document/document_permissions"); | |
| 47 | + $oDocument = Document::get($_REQUEST['fDocumentID']); | |
| 48 | + $oPO = KTPermissionObject::get($oDocument->getPermissionObjectID()); | |
| 49 | + $aPermissions = KTPermission::getList(); | |
| 50 | + $aMapPermissionGroup = array(); | |
| 51 | + foreach ($aPermissions as $oPermission) { | |
| 52 | + $oPA = KTPermissionAssignment::getByPermissionAndObject($oPermission, $oPO); | |
| 53 | + if (PEAR::isError($oPA)) { | |
| 54 | + continue; | |
| 55 | + } | |
| 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; | |
| 62 | + } | |
| 63 | + } | |
| 64 | + $aMapPermissionUser = array(); | |
| 65 | + $aUsers = User::getList(); | |
| 66 | + foreach ($aPermissions as $oPermission) { | |
| 67 | + $iPermissionID = $oPermission->getID(); | |
| 68 | + foreach ($aUsers as $oUser) { | |
| 69 | + if (KTPermissionUtil::userHasPermissionOnItem($oUser, $oPermission, $oDocument)) { | |
| 70 | + $aMapPermissionUser[$iPermissionID][$oUser->getID()] = true; | |
| 71 | + } | |
| 72 | + } | |
| 73 | + } | |
| 74 | + | |
| 75 | + $oInherited = KTPermissionUtil::findRootObjectForPermissionObject($oPO); | |
| 76 | + if ($oInherited === $oDocument) { | |
| 77 | + $bEdit = true; | |
| 78 | + } else { | |
| 79 | + $iInheritedFolderID = $oInherited->getID(); | |
| 80 | + $sInherited = displayFolderPathLink(Folder::getFolderPathAsArray($iInheritedFolderID), | |
| 81 | + Folder::getFolderPathNamesAsArray($iInheritedFolderID), | |
| 82 | + "$default->rootUrl/control.php?action=editFolderPermissions"); | |
| 83 | + $bEdit = false; | |
| 84 | + } | |
| 85 | + | |
| 86 | + $aTemplateData = array( | |
| 87 | + "permissions" => $aPermissions, | |
| 88 | + "groups" => Group::getList(), | |
| 89 | + "iDocumentID" => $_REQUEST['fDocumentID'], | |
| 90 | + "aMapPermissionGroup" => $aMapPermissionGroup, | |
| 91 | + "users" => $aUsers, | |
| 92 | + "aMapPermissionUser" => $aMapPermissionUser, | |
| 93 | + "edit" => $bEdit, | |
| 94 | + "inherited" => $sInherited, | |
| 95 | + ); | |
| 96 | + return $oTemplate->render($aTemplateData); | |
| 97 | + } | |
| 98 | + | |
| 99 | + function handleOutput($data) { | |
| 100 | + global $main; | |
| 101 | + $main->bFormDisabled = true; | |
| 102 | + $main->setCentralPayload($data); | |
| 103 | + $main->render(); | |
| 104 | + } | |
| 105 | + | |
| 106 | + function do_update() { | |
| 107 | + $oDocument = Document::get($_REQUEST['fDocumentID']); | |
| 108 | + $oPO = KTPermissionObject::get($oDocument->getPermissionObjectID()); | |
| 109 | + $aFoo = $_REQUEST['foo']; | |
| 110 | + $aPermissions = KTPermission::getList(); | |
| 111 | + foreach ($aPermissions as $oPermission) { | |
| 112 | + $iPermID = $oPermission->getID(); | |
| 113 | + $aAllowed = KTUtil::arrayGet($aFoo, $iPermID, array()); | |
| 114 | + KTPermissionUtil::setPermissionForID($oPermission, $oPO, $aAllowed); | |
| 115 | + } | |
| 116 | + KTPermissionUtil::updatePermissionLookupForPO($oPO); | |
| 117 | + return $this->errorRedirectToMain('Permissions updated', | |
| 118 | + array('fDocumentID' => $oDocument->getID())); | |
| 119 | + } | |
| 120 | + | |
| 121 | + function do_copyPermissions() { | |
| 122 | + $oDocument = Document::get($_REQUEST['fDocumentID']); | |
| 123 | + KTPermissionUtil::copyPermissionObject($oDocument); | |
| 124 | + return $this->errorRedirectToMain('Permissions updated', | |
| 125 | + array('fDocumentID' => $oDocument->getID())); | |
| 126 | + } | |
| 127 | + | |
| 128 | + function do_inheritPermissions() { | |
| 129 | + $oDocument = Document::get($_REQUEST['fDocumentID']); | |
| 130 | + KTPermissionUtil::inheritPermissionObject($oDocument); | |
| 131 | + return $this->errorRedirectToMain('Permissions updated', | |
| 132 | + array('fDocumentID' => $oDocument->getID())); | |
| 133 | + } | |
| 134 | + | |
| 135 | + | |
| 136 | +} | |
| 137 | + | |
| 138 | +$oDispatcher = new DocumentPermissionsDispatcher; | |
| 139 | +$oDispatcher->dispatch(); | |
| 140 | + | |
| 141 | +?> | ... | ... |
templates/ktcore/document/document_permissions.smarty
0 → 100644
| 1 | +{literal} | |
| 2 | +<style> | |
| 3 | +td.true { background-color: #aaffaa; text-align: centre } | |
| 4 | +td.false { background-color: #ffaaaa; text-align: centre } | |
| 5 | +.edit { display: none; } | |
| 6 | +.view { display: block; } | |
| 7 | + | |
| 8 | +.tablebutton { | |
| 9 | + margin: 0em; | |
| 10 | + margin-right: 1em; | |
| 11 | + border: 1px solid #cccccc; | |
| 12 | +} | |
| 13 | +.activebutton { | |
| 14 | + background-color: #eeeeff; | |
| 15 | +} | |
| 16 | +.inactivebutton { | |
| 17 | + background-color: #ffeeee; | |
| 18 | +} | |
| 19 | +</style> | |
| 20 | +{/literal} | |
| 21 | +<script language="javascript" src="/thirdpartyjs/MochiKit/Base.js"> | |
| 22 | +<script language="javascript" src="/thirdpartyjs/MochiKit/Iter.js"> | |
| 23 | +<script language="javascript" src="/thirdpartyjs/MochiKit/DOM.js"> | |
| 24 | +<h2>Document permissions</h2> | |
| 25 | + | |
| 26 | +{ if $edit } | |
| 27 | +<div style="text-align: right"> | |
| 28 | +<span class="tablebutton activebutton"> | |
| 29 | +<a href="javascript:MochiKit.DOM.showElement('view'); MochiKit.DOM.hideElement('edit');">View</a> | |
| 30 | +</span> | |
| 31 | +<span class="tablebutton inactivebutton"> | |
| 32 | +<a href="javascript:MochiKit.DOM.showElement('edit'); MochiKit.DOM.hideElement('view');">Edit</a> | |
| 33 | +</span> | |
| 34 | +</div> | |
| 35 | +{ /if } | |
| 36 | +<div class="view" id="view"> | |
| 37 | +<table class="pretty" cellspacing="0" cellpadding="0" border="0" width="100%"> | |
| 38 | +<thead> | |
| 39 | +<tr> | |
| 40 | +<th>Group</th> | |
| 41 | +{ foreach item=oPerm from=$permissions } | |
| 42 | +<th title="{$oPerm->sName}">{$oPerm->sHumanName}</th> | |
| 43 | +{ /foreach } | |
| 44 | +</tr> | |
| 45 | +</thead> | |
| 46 | +<tbody> | |
| 47 | +{ foreach item=oGroup from=$groups } | |
| 48 | +<td>{$oGroup->getID()} / {$oGroup->getName()}</td> | |
| 49 | + { assign var=iGroupID value=$oGroup->getID() } | |
| 50 | + { foreach item=oPerm from=$permissions } | |
| 51 | + { assign var=iPermID value=$oPerm->getID() } | |
| 52 | + { assign var=bHasPerm value=$aMapPermissionGroup[$iPermID][$iGroupID] } | |
| 53 | +{ if $bHasPerm } | |
| 54 | +<td class="true">True</td> | |
| 55 | +{ else } | |
| 56 | +<td class="false">False</td> | |
| 57 | +{ /if } | |
| 58 | + { /foreach } | |
| 59 | +</tr> | |
| 60 | +{ /foreach } | |
| 61 | +</tbody> | |
| 62 | +</table> | |
| 63 | + | |
| 64 | +<div style="text-align: center; padding-top: 2px"> | |
| 65 | +<span style="border: 1px solid #cccccc; background-color: #ffeeee; | |
| 66 | +padding: 2px; padding-right: 1em; padding-left: 1em"> | |
| 67 | +{ if $inherited } | |
| 68 | +Inherited from {$inherited} | |
| 69 | +{* [<a | |
| 70 | +href="{$smarty.server.PHP_SELF}?action=copyPermissions&fDocumentID={$iDocumentID}">Copy</a>] | |
| 71 | +*} | |
| 72 | +{ else } | |
| 73 | +[<a | |
| 74 | +href="{$smarty.server.PHP_SELF}?action=inheritPermissions&fDocumentID={$iDocumentID}">Use | |
| 75 | +parent's permissions</a>] | |
| 76 | +{ /if } | |
| 77 | +</span> | |
| 78 | +</div> | |
| 79 | +</div> | |
| 80 | + | |
| 81 | +{ if $edit } | |
| 82 | +<div class="edit" id="edit"> | |
| 83 | +<form method="POST"> | |
| 84 | +<input type="hidden" name="action" value="update"> | |
| 85 | +<input type="hidden" name="fDocumentID" value="{$iDocumentID}"> | |
| 86 | +<table class="pretty" cellspacing="0" cellpadding="0" border="0" width="100%"> | |
| 87 | +<thead> | |
| 88 | +<tr> | |
| 89 | +<th>Group</th> | |
| 90 | +{ foreach item=oPerm from=$permissions } | |
| 91 | +<th title="{$oPerm->sName}">{$oPerm->sHumanName}</th> | |
| 92 | +{ /foreach } | |
| 93 | +</tr> | |
| 94 | +</thead> | |
| 95 | +<tbody> | |
| 96 | +{ foreach item=oGroup from=$groups } | |
| 97 | +<td>{$oGroup->getID()} / {$oGroup->getName()}</td> | |
| 98 | + { assign var=iGroupID value=$oGroup->getID() } | |
| 99 | + { foreach item=oPerm from=$permissions } | |
| 100 | + { assign var=iPermID value=$oPerm->getID() } | |
| 101 | + { assign var=bHasPerm value=$aMapPermissionGroup[$iPermID][$iGroupID] } | |
| 102 | +{ if $bHasPerm } | |
| 103 | +<td class="true"><input type="checkbox" name="foo[{$iPermID}][group][]" | |
| 104 | +value="{$iGroupID}" checked="true"></td> | |
| 105 | +{ else } | |
| 106 | +<td class="false"><input type="checkbox" name="foo[{$iPermID}][group][]" | |
| 107 | +value="{$iGroupID}"></td> | |
| 108 | +{ /if } | |
| 109 | + { /foreach } | |
| 110 | +</tr> | |
| 111 | +{ /foreach } | |
| 112 | +</tbody> | |
| 113 | +</table> | |
| 114 | + | |
| 115 | +<input type="submit" name="submit" value="Update"> | |
| 116 | +</form> | |
| 117 | +</div> | |
| 118 | +{ /if } | |
| 119 | + | |
| 120 | +<h2>User permissions</h2> | |
| 121 | + | |
| 122 | +<div> | |
| 123 | +<table class="pretty" cellspacing="0" cellpadding="0" border="0" width="100%"> | |
| 124 | +<thead> | |
| 125 | +<tr> | |
| 126 | +<th>User</th> | |
| 127 | +{ foreach item=oPerm from=$permissions } | |
| 128 | +<th title="{$oPerm->sName}">{$oPerm->sHumanName}</th> | |
| 129 | +{ /foreach } | |
| 130 | +</tr> | |
| 131 | +</thead> | |
| 132 | +<tbody> | |
| 133 | +{ foreach item=oUser from=$users } | |
| 134 | +<td>{$oUser->getID()} / {$oUser->getName()}</td> | |
| 135 | + { assign var=iUserID value=$oUser->getID() } | |
| 136 | + { foreach item=oPerm from=$permissions } | |
| 137 | + { assign var=iPermID value=$oPerm->getID() } | |
| 138 | + { assign var=bHasPerm value=$aMapPermissionUser[$iPermID][$iUserID] } | |
| 139 | +{ if $bHasPerm } | |
| 140 | +<td class="true">True</td> | |
| 141 | +{ else } | |
| 142 | +<td class="false">False</td> | |
| 143 | +{ /if } | |
| 144 | + { /foreach } | |
| 145 | +</tr> | |
| 146 | +{ /foreach } | |
| 147 | +</tbody> | |
| 148 | +</table> | |
| 149 | +</div> | ... | ... |