From c66d74dd9fc680c2dc02b2bc3384f8083d805dff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Noack?= <noack@data-quest.de> Date: Fri, 21 Jan 2022 14:09:51 +0000 Subject: [PATCH] Resolve "Sperrzeiten sperren auch globale Raumadmins" --- .../resources/admin/user_permissions.php | 2 +- lib/models/resources/Resource.class.php | 48 +++++++++---------- 2 files changed, 23 insertions(+), 27 deletions(-) diff --git a/app/views/resources/admin/user_permissions.php b/app/views/resources/admin/user_permissions.php index 23378a5c42c..33a9980af13 100644 --- a/app/views/resources/admin/user_permissions.php +++ b/app/views/resources/admin/user_permissions.php @@ -94,7 +94,7 @@ </td> <td> <?= htmlReady($permission->perms) ?> - <? if ($current_global_lock and ($permission->perms != 'admin')): ?> + <? if ($current_global_lock) : ?> <?= Icon::create('exclaim', 'attention')->asImg( '20px', [ diff --git a/lib/models/resources/Resource.class.php b/lib/models/resources/Resource.class.php index 2b5de69df02..90690397a1a 100644 --- a/lib/models/resources/Resource.class.php +++ b/lib/models/resources/Resource.class.php @@ -2287,8 +2287,7 @@ class Resource extends SimpleORMap implements StudipItem */ public function getUserPermission(User $user, $time_range = [], $permanent_only = false) { - if ($user->perms == 'root') { - //root users are automatically resource admins: + if (ResourceManager::getGlobalResourcePermission($user) === 'admin') { return 'admin'; } @@ -2357,23 +2356,30 @@ class Resource extends SimpleORMap implements StudipItem } } + if (!$perm_string) { + //A user which doesn't have special permissions for this resource + //can have global resource permissions: + $global_perm = ResourceManager::getGlobalResourcePermission($user); + if ($global_perm) { + //Set the permission cache: + if (!is_array(self::$permission_cache[$this->id])) { + self::$permission_cache[$this->id] = []; + } + self::$permission_cache[$this->id][$user->id] = $global_perm; + } + $perm_string = $global_perm; + } //Now we must check for global resource locks: if (GlobalResourceLock::currentlyLocked()) { //The resource management system is currently locked. - //We must either return 'admin' for users with that - //permission level or 'user' for all other permission + //permission level 'user' for all other permission //levels. - if ($perm_string == 'admin') { - return 'admin'; - } elseif ($perm_string) { + if ($perm_string) { //A permission level exists for the user. //The user gets "user" permissions in case //a global lock is active. - return 'user'; - } else { - //No permission level exists for the user. - return ''; + $perm_string = 'user'; } } @@ -2383,17 +2389,7 @@ class Resource extends SimpleORMap implements StudipItem return $perm_string; } - //A user which doesn't have special permissions for this resource - //can have global resource permissions: - $global_perm = ResourceManager::getGlobalResourcePermission($user); - if ($global_perm) { - //Set the permission cache: - if (!is_array(self::$permission_cache[$this->id])) { - self::$permission_cache[$this->id] = []; - } - self::$permission_cache[$this->id][$user->id] = $global_perm; - } - return $global_perm; + } /** @@ -2417,8 +2413,8 @@ class Resource extends SimpleORMap implements StudipItem return false; } - if ($user->perms == 'root') { - //root users have all permissions for the resource. + + if (ResourceManager::getGlobalResourcePermission($user) === 'admin') { return true; } @@ -2435,7 +2431,7 @@ class Resource extends SimpleORMap implements StudipItem return false; } } elseif ($permission === 'autor') { - if ($perm_level != 'admin' && GlobalResourceLock::currentlyLocked()) { + if (GlobalResourceLock::currentlyLocked()) { //A global resource lock means no writing actions are permitted. return false; } @@ -2445,7 +2441,7 @@ class Resource extends SimpleORMap implements StudipItem return false; } } elseif ($permission === 'tutor') { - if ($perm_level != 'admin' && GlobalResourceLock::currentlyLocked()) { + if (GlobalResourceLock::currentlyLocked()) { //A global resource lock means no writing actions are permitted. return false; } -- GitLab