diff options
Diffstat (limited to 'lib/private/Collaboration/Resources/Manager.php')
-rw-r--r-- | lib/private/Collaboration/Resources/Manager.php | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/lib/private/Collaboration/Resources/Manager.php b/lib/private/Collaboration/Resources/Manager.php index 55274432d76..ae42f272c05 100644 --- a/lib/private/Collaboration/Resources/Manager.php +++ b/lib/private/Collaboration/Resources/Manager.php @@ -193,6 +193,85 @@ class Manager implements IManager { return false; } + public function cacheAccessForResource(IResource $resource, ?IUser $user, bool $access): void { + $query = $this->connection->getQueryBuilder(); + $userId = $user instanceof IUser ? $user->getUID() : ''; + + $query->insert('collres_accesscache') + ->values([ + 'user_id' => $query->createNamedParameter($userId), + 'resource_id' => $query->createNamedParameter($resource->getId()), + 'access' => $query->createNamedParameter($access), + ]); + $query->execute(); + } + + public function cacheAccessForCollection(ICollection $collection, ?IUser $user, bool $access): void { + $query = $this->connection->getQueryBuilder(); + $userId = $user instanceof IUser ? $user->getUID() : ''; + + $query->insert('collres_accesscache') + ->values([ + 'user_id' => $query->createNamedParameter($userId), + 'collection_id' => $query->createNamedParameter($collection->getId()), + 'access' => $query->createNamedParameter($access), + ]); + $query->execute(); + } + + public function invalidateAccessCacheForUser(?IUser $user): void { + $query = $this->connection->getQueryBuilder(); + $userId = $user instanceof IUser ? $user->getUID() : ''; + + $query->delete('collres_accesscache') + ->where($query->expr()->eq('user_id', $query->createNamedParameter($userId))); + $query->execute(); + } + + public function invalidateAccessCacheForResource(IResource $resource): void { + $query = $this->connection->getQueryBuilder(); + + $query->delete('collres_accesscache') + ->where($query->expr()->eq('resource_id', $query->createNamedParameter($resource->getId()))); + $query->execute(); + + foreach ($resource->getCollections() as $collection) { + $this->invalidateAccessCacheForCollection($collection); + } + } + + protected function invalidateAccessCacheForCollection(ICollection $collection): void { + $query = $this->connection->getQueryBuilder(); + + $query->delete('collres_accesscache') + ->where($query->expr()->eq('collection_id', $query->createNamedParameter($collection->getId()))); + $query->execute(); + } + + public function invalidateAccessCacheForResourceByUser(IResource $resource, ?IUser $user): void { + $query = $this->connection->getQueryBuilder(); + $userId = $user instanceof IUser ? $user->getUID() : ''; + + $query->delete('collres_accesscache') + ->where($query->expr()->eq('resource_id', $query->createNamedParameter($resource->getId()))) + ->andWhere($query->expr()->eq('user_id', $query->createNamedParameter($userId))); + $query->execute(); + + foreach ($resource->getCollections() as $collection) { + $this->invalidateAccessCacheForCollectionByUser($collection, $user); + } + } + + protected function invalidateAccessCacheForCollectionByUser(ICollection $collection, ?IUser $user): void { + $query = $this->connection->getQueryBuilder(); + $userId = $user instanceof IUser ? $user->getUID() : ''; + + $query->delete('collres_accesscache') + ->where($query->expr()->eq('collection_id', $query->createNamedParameter($collection->getId()))) + ->andWhere($query->expr()->eq('user_id', $query->createNamedParameter($userId))); + $query->execute(); + } + /** * @param IProvider $provider */ |