Commit 4212e9cd5c419bdc97efa66f87ac50ac4024aebf
1 parent
0b936ff5
KTS-2655
"Error Message On Removing Permissions but action goes ahead anyway" Fixed. Added a check to ensure the user doesn't removed his/her own permission to manage security. Committed by: Megan Watson Reviewed by: Jonathan Byrne git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@8162 c91229c3-7414-0410-bfa2-8a42b809f60b
Showing
2 changed files
with
51 additions
and
13 deletions
lib/groups/GroupUtil.php
| @@ -7,32 +7,32 @@ | @@ -7,32 +7,32 @@ | ||
| 7 | * KnowledgeTree Open Source Edition | 7 | * KnowledgeTree Open Source Edition |
| 8 | * Document Management Made Simple | 8 | * Document Management Made Simple |
| 9 | * Copyright (C) 2004 - 2008 The Jam Warehouse Software (Pty) Limited | 9 | * Copyright (C) 2004 - 2008 The Jam Warehouse Software (Pty) Limited |
| 10 | - * | 10 | + * |
| 11 | * This program is free software; you can redistribute it and/or modify it under | 11 | * This program is free software; you can redistribute it and/or modify it under |
| 12 | * the terms of the GNU General Public License version 3 as published by the | 12 | * the terms of the GNU General Public License version 3 as published by the |
| 13 | * Free Software Foundation. | 13 | * Free Software Foundation. |
| 14 | - * | 14 | + * |
| 15 | * This program is distributed in the hope that it will be useful, but WITHOUT | 15 | * This program is distributed in the hope that it will be useful, but WITHOUT |
| 16 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | 16 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
| 17 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more | 17 | * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
| 18 | * details. | 18 | * details. |
| 19 | - * | 19 | + * |
| 20 | * You should have received a copy of the GNU General Public License | 20 | * You should have received a copy of the GNU General Public License |
| 21 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | 21 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 22 | - * | 22 | + * |
| 23 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, | 23 | * You can contact The Jam Warehouse Software (Pty) Limited, Unit 1, Tramber Place, |
| 24 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. | 24 | * Blake Street, Observatory, 7925 South Africa. or email info@knowledgetree.com. |
| 25 | - * | 25 | + * |
| 26 | * The interactive user interfaces in modified source and object code versions | 26 | * The interactive user interfaces in modified source and object code versions |
| 27 | * of this program must display Appropriate Legal Notices, as required under | 27 | * of this program must display Appropriate Legal Notices, as required under |
| 28 | * Section 5 of the GNU General Public License version 3. | 28 | * Section 5 of the GNU General Public License version 3. |
| 29 | - * | 29 | + * |
| 30 | * In accordance with Section 7(b) of the GNU General Public License version 3, | 30 | * In accordance with Section 7(b) of the GNU General Public License version 3, |
| 31 | * these Appropriate Legal Notices must retain the display of the "Powered by | 31 | * these Appropriate Legal Notices must retain the display of the "Powered by |
| 32 | - * KnowledgeTree" logo and retain the original copyright notice. If the display of the | 32 | + * KnowledgeTree" logo and retain the original copyright notice. If the display of the |
| 33 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices | 33 | * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices |
| 34 | - * must display the words "Powered by KnowledgeTree" and retain the original | ||
| 35 | - * copyright notice. | 34 | + * must display the words "Powered by KnowledgeTree" and retain the original |
| 35 | + * copyright notice. | ||
| 36 | * Contributor( s): ______________________________________ | 36 | * Contributor( s): ______________________________________ |
| 37 | */ | 37 | */ |
| 38 | 38 | ||
| @@ -304,6 +304,26 @@ class GroupUtil { | @@ -304,6 +304,26 @@ class GroupUtil { | ||
| 304 | } | 304 | } |
| 305 | // }}} | 305 | // }}} |
| 306 | 306 | ||
| 307 | + function checkUserInGroups($iUserId, $aGroupIds) { | ||
| 308 | + $sGroupIds = implode(', ', $aGroupIds); | ||
| 309 | + | ||
| 310 | + global $default; | ||
| 311 | + $sTable = $default->users_groups_table; | ||
| 312 | + $sQuery = "SELECT count(*) AS cnt FROM $sTable WHERE user_id = ? AND group_id IN (?)"; | ||
| 313 | + $aParams = array($iUserId, $sGroupIds); | ||
| 314 | + | ||
| 315 | + $res = DBUtil::getOneResult(array($sQuery, $aParams)); | ||
| 316 | + | ||
| 317 | + if(PEAR::isError($res) || empty($res)){ | ||
| 318 | + return false; | ||
| 319 | + } | ||
| 320 | + | ||
| 321 | + if($res['cnt'] > 0){ | ||
| 322 | + return true; | ||
| 323 | + } | ||
| 324 | + return false; | ||
| 325 | + } | ||
| 326 | + | ||
| 307 | // {{{ | 327 | // {{{ |
| 308 | function buildGroupArray() { | 328 | function buildGroupArray() { |
| 309 | global $default; | 329 | global $default; |
plugins/ktcore/folder/Permissions.php
| @@ -453,11 +453,29 @@ class KTFolderPermissionsAction extends KTFolderAction { | @@ -453,11 +453,29 @@ class KTFolderPermissionsAction extends KTFolderAction { | ||
| 453 | if (!KTBrowseUtil::inAdminMode($this->oUser, $this->oFolder)) { | 453 | if (!KTBrowseUtil::inAdminMode($this->oUser, $this->oFolder)) { |
| 454 | $this->oValidator->userHasPermissionOnItem($this->oUser, $this->_sEditShowPermission, $this->oFolder, $aOptions); | 454 | $this->oValidator->userHasPermissionOnItem($this->oUser, $this->_sEditShowPermission, $this->oFolder, $aOptions); |
| 455 | } | 455 | } |
| 456 | + | ||
| 457 | + $aFoo = $_REQUEST['foo']; | ||
| 458 | + $aPermissions = KTPermission::getList(); | ||
| 459 | + | ||
| 460 | + // Check which groups have permission to manage security | ||
| 461 | + $aNewGroups = $aFoo[4]['group']; | ||
| 462 | + $aNewRoles = (isset($aFoo[4]['role']) ? $aFoo[4]['role'] : array()); | ||
| 463 | + | ||
| 464 | + // Ensure the user is not removing his/her own permission to update the folder permissions (manage security) | ||
| 465 | + if(!in_array(-3, $aNewRoles)){ | ||
| 466 | + $iUserId = $this->oUser->getId(); | ||
| 467 | + if(!GroupUtil::checkUserInGroups($iUserId, $aNewGroups)){ | ||
| 468 | + // If user no longer has permission, return an error. | ||
| 469 | + $this->addErrorMessage(_kt('The selected permissions cannot be updated. You will no longer have permission to manage security on this folder.')); | ||
| 470 | + $this->redirectTo('edit', 'fFolderId=' . $this->oFolder->getId()); | ||
| 471 | + exit(0); | ||
| 472 | + } | ||
| 473 | + } | ||
| 474 | + | ||
| 475 | + | ||
| 456 | require_once(KT_LIB_DIR . '/documentmanagement/observers.inc.php'); | 476 | require_once(KT_LIB_DIR . '/documentmanagement/observers.inc.php'); |
| 457 | $oPO = KTPermissionObject::get($this->oFolder->getPermissionObjectId()); | 477 | $oPO = KTPermissionObject::get($this->oFolder->getPermissionObjectId()); |
| 458 | - $aFoo = $_REQUEST['foo']; | ||
| 459 | 478 | ||
| 460 | - $aPermissions = KTPermission::getList(); | ||
| 461 | foreach ($aPermissions as $oPermission) { | 479 | foreach ($aPermissions as $oPermission) { |
| 462 | $iPermId = $oPermission->getId(); | 480 | $iPermId = $oPermission->getId(); |
| 463 | 481 | ||
| @@ -471,11 +489,11 @@ class KTFolderPermissionsAction extends KTFolderAction { | @@ -471,11 +489,11 @@ class KTFolderPermissionsAction extends KTFolderAction { | ||
| 471 | 'transactionNS' => 'ktcore.transactions.permissions_change', | 489 | 'transactionNS' => 'ktcore.transactions.permissions_change', |
| 472 | 'userid' => $_SESSION['userID'], | 490 | 'userid' => $_SESSION['userID'], |
| 473 | 'ip' => Session::getClientIP(), | 491 | 'ip' => Session::getClientIP(), |
| 474 | - )); | 492 | + )); |
| 475 | $aOptions = array( | 493 | $aOptions = array( |
| 476 | 'defaultmessage' => _kt('Error updating permissions'), | 494 | 'defaultmessage' => _kt('Error updating permissions'), |
| 477 | 'redirect_to' => array('edit', sprintf('fFolderId=%d', $this->oFolder->getId())), | 495 | 'redirect_to' => array('edit', sprintf('fFolderId=%d', $this->oFolder->getId())), |
| 478 | - ); | 496 | + ); |
| 479 | $this->oValidator->notErrorFalse($oTransaction, $aOptions); | 497 | $this->oValidator->notErrorFalse($oTransaction, $aOptions); |
| 480 | 498 | ||
| 481 | $po =& new JavascriptObserver($this); | 499 | $po =& new JavascriptObserver($this); |