*/ class AccessChecker implements AccessEntityCREDSChecker { use DefaultAccessCheckerDependency; private DefaultAccessChecker $defaultAccessChecker; private AclManager $aclManager; public function __construct(DefaultAccessChecker $defaultAccessChecker, AclManager $aclManager) { $this->defaultAccessChecker = $defaultAccessChecker; $this->aclManager = $aclManager; } public function checkEntityCreate(User $user, Entity $entity, ScopeData $data): bool { if (!$user->isAdmin()) { return false; } /** @var User $entity */ if ($entity->isSuperAdmin() && !$user->isSuperAdmin()) { return false; } return $this->defaultAccessChecker->checkEntityCreate($user, $entity, $data); } public function checkEntityRead(User $user, Entity $entity, ScopeData $data): bool { /** @var User $entity */ if ($entity->isPortal()) { if ($this->aclManager->getPermissionLevel($user, 'portal') === Table::LEVEL_YES) { return true; } return false; } if ($entity->isSuperAdmin() && !$user->isSuperAdmin()) { return false; } return $this->defaultAccessChecker->checkEntityRead($user, $entity, $data); } public function checkEntityEdit(User $user, Entity $entity, ScopeData $data): bool { /** @var User $entity */ if ($entity->isSystem()) { return false; } if (!$user->isAdmin()) { if ($user->getId() !== $entity->getId()) { return false; } } if ($entity->isSuperAdmin() && !$user->isSuperAdmin()) { return false; } return $this->defaultAccessChecker->checkEntityEdit($user, $entity, $data); } public function checkEntityDelete(User $user, Entity $entity, ScopeData $data): bool { /** @var User $entity */ if (!$user->isAdmin()) { return false; } if ($entity->isSystem()) { return false; } if ($entity->isSuperAdmin() && !$user->isSuperAdmin()) { return false; } return $this->defaultAccessChecker->checkEntityDelete($user, $entity, $data); } public function checkEntityStream(User $user, Entity $entity, ScopeData $data): bool { /** @var User $entity */ return $this->aclManager->checkUserPermission($user, $entity, 'user'); } }