Cache user membership for circles
Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
@@ -41,6 +41,8 @@ use Throwable;
|
|||||||
class CirclesService {
|
class CirclesService {
|
||||||
private bool $circlesEnabled;
|
private bool $circlesEnabled;
|
||||||
|
|
||||||
|
private $userCircleCache = [];
|
||||||
|
|
||||||
public function __construct(IAppManager $appManager) {
|
public function __construct(IAppManager $appManager) {
|
||||||
$this->circlesEnabled = $appManager->isEnabledForUser('circles');
|
$this->circlesEnabled = $appManager->isEnabledForUser('circles');
|
||||||
}
|
}
|
||||||
@@ -70,13 +72,24 @@ class CirclesService {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($this->userCircleCache[$circleId][$userId])) {
|
||||||
|
return $this->userCircleCache[$circleId][$userId];
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$circlesManager = Server::get(CirclesManager::class);
|
$circlesManager = Server::get(CirclesManager::class);
|
||||||
$federatedUser = $circlesManager->getFederatedUser($userId, Member::TYPE_USER);
|
$federatedUser = $circlesManager->getFederatedUser($userId, Member::TYPE_USER);
|
||||||
$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;
|
||||||
|
|||||||
Reference in New Issue
Block a user