Cache user membership for circles

Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
Julius Härtl
2022-09-21 13:46:45 +02:00
parent 6f6d2df9de
commit 1db5d7cf47

View File

@@ -40,6 +40,8 @@ use Throwable;
class CirclesService { class CirclesService {
private $circlesEnabled; private $circlesEnabled;
private $userCircleCache = [];
public function __construct(IAppManager $appManager) { public function __construct(IAppManager $appManager) {
$this->circlesEnabled = $appManager->isEnabledForUser('circles'); $this->circlesEnabled = $appManager->isEnabledForUser('circles');
} }
@@ -70,6 +72,10 @@ class CirclesService {
return false; return false;
} }
if (isset($this->userCircleCache[$circleId][$userId])) {
return $this->userCircleCache[$circleId][$userId];
}
try { try {
/** @var CirclesManager $circlesManager */ /** @var CirclesManager $circlesManager */
$circlesManager = \OC::$server->get(CirclesManager::class); $circlesManager = \OC::$server->get(CirclesManager::class);
@@ -77,7 +83,14 @@ class CirclesService {
$circlesManager->startSession($federatedUser); $circlesManager->startSession($federatedUser);
$circle = $circlesManager->getCircle($circleId); $circle = $circlesManager->getCircle($circleId);
$member = $circle->getInitiator(); $member = $circle->getInitiator();
return $member !== null && $member->getLevel() >= Member::LEVEL_MEMBER; $isUserInCircle = $member !== null && $member->getLevel() >= Member::LEVEL_MEMBER;
if (!isset($this->userCircleCache[$circleId])) {
$this->userCircleCache[$circleId] = [];
}
$this->userCircleCache[$circleId][$userId] = $isUserInCircle;
return $isUserInCircle;
} catch (Throwable $e) { } catch (Throwable $e) {
} }
return false; return false;