From 25783102e9a423e0bd7f4cb92574559ac628bfb9 Mon Sep 17 00:00:00 2001 From: Robert Sesek Date: Mon, 10 Oct 2005 19:05:46 +0000 Subject: [PATCH] r526: Added interface for the new permissions system --- docs/recache.php | 4 ++++ includes/functions.php | 22 ++++++++++++++++------ includes/functions_datastore.php | 14 +++++++++++++- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/docs/recache.php b/docs/recache.php index 2a54fbd..18eab6b 100755 --- a/docs/recache.php +++ b/docs/recache.php @@ -44,6 +44,10 @@ build_products(); echo '

Products cached

'; +build_permissions(); + +echo '

Permissions cached

'; + // $Id$ ?> \ No newline at end of file diff --git a/includes/functions.php b/includes/functions.php index 3ce84e5..b9df34e 100755 --- a/includes/functions.php +++ b/includes/functions.php @@ -73,21 +73,31 @@ function construct_user_display($userinfo, $html = true) // ######################## Start can_perform ######################## // short-hand for bitwise & -function can_perform($bitmask, $userinfo = null) +function can_perform($bitmask, $userinfo = null, $productid = 0) { - global $_PERMISSION; + global $bugsys, $_PERMISSION; + + if (!$userinfo) + { + $userinfo = $bugsys->userinfo; + } if (!isset($_PERMISSION["$bitmask"])) { trigger_error('Invalid bitmask "' . $bitmask . '" specified for can_perform() [includes/functions.php]', E_USER_WARNING); } - if (!$userinfo) + if ($productid) { - global $bugsys; - return ($bugsys->userinfo['permissions'] & $_PERMISSION["$bitmask"]); + $inspecific = array('cansearch', 'canbeassignedto', 'canadminpanel', 'canadminbugs', 'canadminfields', 'canadminversions', 'canadminusers', 'canadmingroups', 'canadmintools'); + + if (!in_array($bitmask, $inspecific)) + { + return ($bugsys->datastore['permission']["$userinfo[usergroupid]"]["$productid"] & $_PREMISSION["$bitmask"]); + } } - return ($userinfo['permissions'] & $_PERMISSION["bitmask"]); + + return ($userinfo['permissions'] & $_PERMISSION["$bitmask"]); } // ################# Start construct_datastore_select ################ diff --git a/includes/functions_datastore.php b/includes/functions_datastore.php index 8f99b82..c0ec352 100755 --- a/includes/functions_datastore.php +++ b/includes/functions_datastore.php @@ -221,7 +221,19 @@ function build_permissions() { global $bugsys; - // first cache all the global permissions + $permissions = $bugsys->db->query("SELECT * FROM " . TABLE_PREFIX . "permission ORDER BY usergroupid, productid"); + while ($permission = $bugsys->db->fetch_array($permissions)) + { + $tempstore["$permission[usergroupid]"]["$permission[productid]"] = $permission['mask']; + } + + $bugsys->db->query(" + ### replacing permissions cache ### + REPLACE INTO " . TABLE_PREFIX . "datastore (title, data) + VALUES ('permission', '" . $bugsys->escape(serialize($tempstore)) . "')" + ); + + $bugsys->datastore['permission'] = $tempstore; } /*=====================================================================*\ -- 2.22.5