mirror of
https://github.com/nextcloud/server.git
synced 2026-02-28 20:40:39 -05:00
Merge pull request #29058 from nextcloud/bugfix/28981/transfer-ownership-deleted-user
Do not transfer shares for deleted users
This commit is contained in:
commit
ee32c7c328
1 changed files with 20 additions and 7 deletions
|
|
@ -43,6 +43,7 @@ use OCP\Files\IHomeStorage;
|
|||
use OCP\Files\InvalidPathException;
|
||||
use OCP\Files\Mount\IMountManager;
|
||||
use OCP\IUser;
|
||||
use OCP\IUserManager;
|
||||
use OCP\Share\IManager as IShareManager;
|
||||
use OCP\Share\IShare;
|
||||
use Symfony\Component\Console\Helper\ProgressBar;
|
||||
|
|
@ -69,14 +70,19 @@ class OwnershipTransferService {
|
|||
/** @var IUserMountCache */
|
||||
private $userMountCache;
|
||||
|
||||
/** @var IUserManager */
|
||||
private $userManager;
|
||||
|
||||
public function __construct(IEncryptionManager $manager,
|
||||
IShareManager $shareManager,
|
||||
IMountManager $mountManager,
|
||||
IUserMountCache $userMountCache) {
|
||||
IUserMountCache $userMountCache,
|
||||
IUserManager $userManager) {
|
||||
$this->encryptionManager = $manager;
|
||||
$this->shareManager = $shareManager;
|
||||
$this->mountManager = $mountManager;
|
||||
$this->userMountCache = $userMountCache;
|
||||
$this->userManager = $userManager;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -401,13 +407,20 @@ class OwnershipTransferService {
|
|||
$share->setSharedBy($destinationUid);
|
||||
}
|
||||
|
||||
if ($share->getShareType() === IShare::TYPE_USER &&
|
||||
!$this->userManager->userExists($share->getSharedWith())) {
|
||||
// stray share with deleted user
|
||||
$output->writeln('<error>Share with id ' . $share->getId() . ' points at deleted user "' . $share->getSharedWith() . '", deleting</error>');
|
||||
$this->shareManager->deleteShare($share);
|
||||
continue;
|
||||
} else {
|
||||
// trigger refetching of the node so that the new owner and mountpoint are taken into account
|
||||
// otherwise the checks on the share update will fail due to the original node not being available in the new user scope
|
||||
$this->userMountCache->clear();
|
||||
$share->setNodeId($share->getNode()->getId());
|
||||
|
||||
// trigger refetching of the node so that the new owner and mountpoint are taken into account
|
||||
// otherwise the checks on the share update will fail due to the original node not being available in the new user scope
|
||||
$this->userMountCache->clear();
|
||||
$share->setNodeId($share->getNode()->getId());
|
||||
|
||||
$this->shareManager->updateShare($share);
|
||||
$this->shareManager->updateShare($share);
|
||||
}
|
||||
}
|
||||
} catch (\OCP\Files\NotFoundException $e) {
|
||||
$output->writeln('<error>Share with id ' . $share->getId() . ' points at deleted file, skipping</error>');
|
||||
|
|
|
|||
Loading…
Reference in a new issue