summaryrefslogtreecommitdiffstats
path: root/lib/private/Collaboration/Resources/Manager.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private/Collaboration/Resources/Manager.php')
-rw-r--r--lib/private/Collaboration/Resources/Manager.php79
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
*/