mirror of
https://github.com/nextcloud/server.git
synced 2026-06-11 01:30:50 -04:00
fix(FederatedShareProvider): Delete external shares when groups are deleted or users removed from a group
Signed-off-by: provokateurin <kate@provokateurin.de>
This commit is contained in:
parent
0df4817be1
commit
f5b5aec296
1 changed files with 44 additions and 14 deletions
|
|
@ -882,30 +882,60 @@ class FederatedShareProvider implements IShareProvider {
|
|||
//TODO: probably a good idea to send unshare info to remote servers
|
||||
|
||||
$qb = $this->dbConnection->getQueryBuilder();
|
||||
|
||||
$qb->delete('share')
|
||||
->where($qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_REMOTE)))
|
||||
->andWhere($qb->expr()->eq('uid_owner', $qb->createNamedParameter($uid)))
|
||||
->executeStatement();
|
||||
|
||||
$qb = $this->dbConnection->getQueryBuilder();
|
||||
$qb->delete('share_external')
|
||||
->where($qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_GROUP)))
|
||||
->andWhere($qb->expr()->eq('user', $qb->createNamedParameter($uid)))
|
||||
->executeStatement();
|
||||
}
|
||||
|
||||
/**
|
||||
* This provider does not handle groups
|
||||
*
|
||||
* @param string $gid
|
||||
*/
|
||||
public function groupDeleted($gid) {
|
||||
// We don't handle groups here
|
||||
$qb = $this->dbConnection->getQueryBuilder();
|
||||
$qb->select('id')
|
||||
->from('share_external')
|
||||
->where($qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_GROUP)))
|
||||
// This is not a typo, the group ID is really stored in the 'user' column
|
||||
->andWhere($qb->expr()->eq('user', $qb->createNamedParameter($gid)));
|
||||
$cursor = $qb->executeQuery();
|
||||
$parentShareIds = $cursor->fetchAll(\PDO::FETCH_COLUMN);
|
||||
$cursor->closeCursor();
|
||||
if ($parentShareIds === []) {
|
||||
return;
|
||||
}
|
||||
|
||||
$qb = $this->dbConnection->getQueryBuilder();
|
||||
$parentShareIdsParam = $qb->createNamedParameter($parentShareIds, IQueryBuilder::PARAM_INT_ARRAY);
|
||||
$qb->delete('share_external')
|
||||
->where($qb->expr()->in('id', $parentShareIdsParam))
|
||||
->orWhere($qb->expr()->in('parent', $parentShareIdsParam))
|
||||
->executeStatement();
|
||||
}
|
||||
|
||||
/**
|
||||
* This provider does not handle groups
|
||||
*
|
||||
* @param string $uid
|
||||
* @param string $gid
|
||||
*/
|
||||
public function userDeletedFromGroup($uid, $gid) {
|
||||
// We don't handle groups here
|
||||
$qb = $this->dbConnection->getQueryBuilder();
|
||||
$qb->select('id')
|
||||
->from('share_external')
|
||||
->where($qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_GROUP)))
|
||||
// This is not a typo, the group ID is really stored in the 'user' column
|
||||
->andWhere($qb->expr()->eq('user', $qb->createNamedParameter($gid)));
|
||||
$cursor = $qb->executeQuery();
|
||||
$parentShareIds = $cursor->fetchAll(\PDO::FETCH_COLUMN);
|
||||
$cursor->closeCursor();
|
||||
if ($parentShareIds === []) {
|
||||
return;
|
||||
}
|
||||
|
||||
$qb = $this->dbConnection->getQueryBuilder();
|
||||
$parentShareIdsParam = $qb->createNamedParameter($parentShareIds, IQueryBuilder::PARAM_INT_ARRAY);
|
||||
$qb->delete('share_external')
|
||||
->where($qb->expr()->in('parent', $parentShareIdsParam))
|
||||
->andWhere($qb->expr()->eq('user', $qb->createNamedParameter($uid)))
|
||||
->executeStatement();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue