From ddab79e04bc4ffec86946f77e0995b56fd4b0052 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 5 Nov 2019 17:38:04 +0100 Subject: [permissionmanager] Fix creating bogus negative cache entries If a permission check for a location yielded false, a cache entry for all parent locations with value "false" was created as well. --- .../permissionmanager/inc/permissionutil.inc.php | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/modules-available/permissionmanager/inc/permissionutil.inc.php b/modules-available/permissionmanager/inc/permissionutil.inc.php index 46b8c065..6aa97600 100644 --- a/modules-available/permissionmanager/inc/permissionutil.inc.php +++ b/modules-available/permissionmanager/inc/permissionutil.inc.php @@ -83,14 +83,12 @@ class PermissionUtil $locations = [0]; } else { $locations = Location::getLocationRootChain($locationid); - if (empty($locations)) { // Non-existent location, still continue as user might have global perms - $locations = [0]; - } + $locations[] = 0; } $cache =& self::$permissionCacheLoc; if (array_key_exists($key, $cache)) { if (array_key_exists($locationid, $cache[$key])) - return $cache[$key][$locationid]; // Exact match - return immedtiately + return $cache[$key][$locationid]; // Exact match - return immediately foreach ($locations as $lid) { if (array_key_exists($lid, $cache[$key]) && $cache[$key][$lid]) { $cache[$key][$locationid] = true; @@ -149,14 +147,6 @@ class PermissionUtil $cache[$key] = $retval; } else { $cache[$key][$locationid] = $retval; - if ($cacheAll) { - $locations = array_keys($allLocs); - } - foreach ($locations as $lid) { - if (!array_key_exists($lid, $cache[$key])) { - $cache[$key][$lid] = false; - } - } } return $retval; } -- cgit v1.2.3-55-g7522