From ba44a8c7346092e2d05ec6cfc18e9faa13794d89 Mon Sep 17 00:00:00 2001 From: Maxence Lange Date: Fri, 1 Apr 2022 10:56:55 -0100 Subject: [PATCH] +runAsSuperSession Signed-off-by: Maxence Lange --- lib/CirclesManager.php | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/lib/CirclesManager.php b/lib/CirclesManager.php index 32da68c60..6b4f99146 100644 --- a/lib/CirclesManager.php +++ b/lib/CirclesManager.php @@ -63,6 +63,7 @@ use OCA\Circles\Service\MemberService; use OCA\Circles\Service\MembershipService; use OCA\Circles\Tools\Exceptions\InvalidItemException; +use Throwable; /** * Class CirclesManager @@ -206,6 +207,40 @@ public function startAppSession(string $appId, int $appSerial = Member::APP_DEFA $this->federatedUserService->setLocalCurrentApp($appId, $appSerial); } + + /** + * Run a single method as Super, then Super level will be removed + * + * @throws Throwable + * @noinspection PhpUndefinedVariableInspection + */ + public function runAsSuperSession(string $method, array $params = []) { + $currentUser = $this->federatedUserService->getCurrentUser(); + $this->startSuperSession(); + + $throwable = null; + try { + $result = call_user_func_array([$this, $method], $params); + } catch (Throwable $t) { + $throwable = $t; + } + + $this->federatedUserService->bypassCurrentUserCondition(false); + if (!is_null($currentUser)) { + try { + $this->federatedUserService->setCurrentUser($currentUser); + } catch (FederatedUserException $e) { + } + } + + if (!is_null($throwable)) { + throw $throwable; + } + + return $result; + } + + /** * $userId - userId to emulate as initiator (can be empty) * $userType - specify if userIs not a singleId