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> |