when a user was delete remove them from applicable list, unless
it is the only user, then remove the mount Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
This commit is contained in:
parent
86df25ebd3
commit
0172fb7aad
|
@ -34,6 +34,8 @@ require_once __DIR__ . '/../3rdparty/autoload.php';
|
|||
|
||||
// register Application object singleton
|
||||
\OC_Mount_Config::$app = new \OCA\Files_External\AppInfo\Application();
|
||||
\OC_Mount_Config::$app->registerListeners();
|
||||
|
||||
$appContainer = \OC_Mount_Config::$app->getContainer();
|
||||
|
||||
\OCA\Files\App::getNavigationManager()->add(function () {
|
||||
|
|
|
@ -32,6 +32,7 @@ namespace OCA\Files_External\AppInfo;
|
|||
use OCA\Files_External\Config\UserPlaceholderHandler;
|
||||
use OCA\Files_External\Lib\Auth\PublicKey\RSAPrivateKey;
|
||||
use OCA\Files_External\Lib\Auth\SMB\KerberosAuth;
|
||||
use OCA\Files_External\Service\DBConfigService;
|
||||
use \OCP\AppFramework\App;
|
||||
use OCP\AppFramework\IAppContainer;
|
||||
use \OCA\Files_External\Service\BackendService;
|
||||
|
@ -62,6 +63,8 @@ use OCA\Files_External\Lib\Backend\DAV;
|
|||
use OCA\Files_External\Lib\Backend\FTP;
|
||||
use OCA\Files_External\Lib\Backend\Local;
|
||||
use OCP\Files\Config\IUserMountCache;
|
||||
use OCP\IUser;
|
||||
use Symfony\Component\EventDispatcher\GenericEvent;
|
||||
|
||||
/**
|
||||
* @package OCA\Files_External\AppInfo
|
||||
|
@ -95,6 +98,20 @@ class Application extends App implements IBackendProvider, IAuthMechanismProvide
|
|||
$this->getAuthMechanisms();
|
||||
}
|
||||
|
||||
public function registerListeners() {
|
||||
$dispatcher = $this->getContainer()->getServer()->getEventDispatcher();
|
||||
$dispatcher->addListener(
|
||||
IUser::class . '::postDelete',
|
||||
function (GenericEvent $event) {
|
||||
/** @var IUser $user */
|
||||
$user = $event->getSubject();
|
||||
/** @var DBConfigService $config */
|
||||
$config = $this->getContainer()->query(DBConfigService::class);
|
||||
$config->modifyMountsOnUserDelete($user->getUID());
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @{inheritdoc}
|
||||
*/
|
||||
|
|
|
@ -114,6 +114,30 @@ class DBConfigService {
|
|||
return $this->getMountsFromQuery($query);
|
||||
}
|
||||
|
||||
public function modifyMountsOnUserDelete(string $uid) {
|
||||
$builder = $this->connection->getQueryBuilder();
|
||||
$query = $builder->select(['a.mount_id', $builder->func()->count('a.mount_id', 'count')])
|
||||
->from('external_applicable', 'a')
|
||||
->rightJoin('a', 'external_applicable', 'b', $builder->expr()->eq('a.mount_id', 'b.mount_id'))
|
||||
->where($builder->expr()->andX( // mounts for user
|
||||
$builder->expr()->eq('a.type', $builder->createNamedParameter(self::APPLICABLE_TYPE_USER, IQueryBuilder::PARAM_INT)),
|
||||
$builder->expr()->eq('a.value', $builder->createNamedParameter($uid))
|
||||
)
|
||||
)
|
||||
->groupBy(['a.mount_id']);
|
||||
$stmt = $query->execute();
|
||||
$result = $stmt->fetchAll();
|
||||
$stmt->closeCursor();
|
||||
|
||||
foreach ($result as $row) {
|
||||
if((int)$row['count'] > 1) {
|
||||
$this->removeApplicable($row['mount_id'], self::APPLICABLE_TYPE_USER, $uid);
|
||||
} else {
|
||||
$this->removeMount($row['mount_id']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get admin defined mounts
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue