From 44d0923e7a000755ef6d8338e0d382e9e97a0106 Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms <tleilax+studip@gmail.com> Date: Tue, 4 Jun 2024 08:12:58 +0000 Subject: [PATCH] add User::hasPermission(), fixes #3453 Closes #3453 Merge request studip/studip!2348 --- RELEASE-NOTES.md | 1 + lib/models/User.class.php | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 556cee65007..37f5fa2cc9d 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -5,6 +5,7 @@ ## Neue Features - Der Stud.IP-Cache ist nun kompatibel zu PSR-6. ([TIC #3701](https://gitlab.studip.de/studip/studip/-/issues/3701)) +- Das `User`-Model hat die Methode `hasPermissionLevel()` erhalten, um einfach abfragen zu können, ob eine Person einen bestimmten Berechtigungsstatus hat. ([Issue #3453](https://gitlab.studip.de/studip/studip/-/issues/3453)) ## Breaking changes diff --git a/lib/models/User.class.php b/lib/models/User.class.php index a9dbc14d4a3..4894031b7ca 100644 --- a/lib/models/User.class.php +++ b/lib/models/User.class.php @@ -1622,4 +1622,29 @@ class User extends AuthUserMd5 implements Range, PrivacyObject, Studip\Calendar\ return ''; } } + + /* + * Returns whether the user has the given permission (for the given range). + * + * @param string $permission + * @param Range|null $for_range + * + * @return bool + */ + public function hasPermissionLevel(string $permission, ?Range $for_range = null): bool + { + if (func_num_args() === 1) { + return $GLOBALS['perm']->have_perm($permission, $this->id); + } + + if ($for_range === null) { + throw new Exception('No valid range given'); + } + + if ($for_range instanceof User) { + return $GLOBALS['perm']->have_profile_perm($permission, $for_range->id, $this->id); + } + + return $GLOBALS['perm']->have_studip_perm($permission, $for_range->id, $this->id); + } } -- GitLab