зеркало из https://github.com/nextcloud/deck.git
Remove deleted users from assignments
Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
Родитель
8cb92934b1
Коммит
9b82779513
|
@ -25,6 +25,7 @@ namespace OCA\Deck\AppInfo;
|
||||||
|
|
||||||
use OCA\Deck\Db\Acl;
|
use OCA\Deck\Db\Acl;
|
||||||
use OCA\Deck\Db\AclMapper;
|
use OCA\Deck\Db\AclMapper;
|
||||||
|
use OCA\Deck\Db\AssignedUsersMapper;
|
||||||
use OCA\Deck\Notification\Notifier;
|
use OCA\Deck\Notification\Notifier;
|
||||||
use OCP\AppFramework\App;
|
use OCP\AppFramework\App;
|
||||||
use OCA\Deck\Middleware\SharingMiddleware;
|
use OCA\Deck\Middleware\SharingMiddleware;
|
||||||
|
@ -65,12 +66,19 @@ class Application extends App {
|
||||||
/** @var IUserManager $userManager */
|
/** @var IUserManager $userManager */
|
||||||
$userManager = $server->getUserManager();
|
$userManager = $server->getUserManager();
|
||||||
$userManager->listen('\OC\User', 'postDelete', function(IUser $user) use ($container) {
|
$userManager->listen('\OC\User', 'postDelete', function(IUser $user) use ($container) {
|
||||||
|
// delete existing acl entries for deleted user
|
||||||
/** @var AclMapper $aclMapper */
|
/** @var AclMapper $aclMapper */
|
||||||
$aclMapper = $container->query(AclMapper::class);
|
$aclMapper = $container->query(AclMapper::class);
|
||||||
$acls = $aclMapper->findByParticipant(Acl::PERMISSION_TYPE_USER, $user->getUID());
|
$acls = $aclMapper->findByParticipant(Acl::PERMISSION_TYPE_USER, $user->getUID());
|
||||||
foreach ($acls as $acl) {
|
foreach ($acls as $acl) {
|
||||||
$aclMapper->delete($acl);
|
$aclMapper->delete($acl);
|
||||||
}
|
}
|
||||||
|
// delete existing user assignments
|
||||||
|
$assignmentMapper = $container->query(AssignedUsersMapper::class);
|
||||||
|
$assignments = $assignmentMapper->findByUserId($user->getUID());
|
||||||
|
foreach ($assignments as $assignment) {
|
||||||
|
$assignmentMapper->delete($assignment);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/** @var IUserManager $userManager */
|
/** @var IUserManager $userManager */
|
||||||
|
|
|
@ -50,6 +50,12 @@ class AssignedUsersMapper extends DeckMapper implements IPermissionMapper {
|
||||||
return $users;
|
return $users;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function findByUserId(string $uid): array {
|
||||||
|
$sql = 'SELECT * FROM `*PREFIX*deck_assigned_users` ' .
|
||||||
|
'WHERE `participant` = ?';
|
||||||
|
return $this->findEntities($sql, [$uid]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public function isOwner($userId, $cardId) {
|
public function isOwner($userId, $cardId) {
|
||||||
return $this->cardMapper->isOwner($userId, $cardId);
|
return $this->cardMapper->isOwner($userId, $cardId);
|
||||||
|
|
|
@ -25,6 +25,7 @@ namespace OCA\Deck\Service;
|
||||||
|
|
||||||
use OCA\Deck\Db\Acl;
|
use OCA\Deck\Db\Acl;
|
||||||
use OCA\Deck\Db\AclMapper;
|
use OCA\Deck\Db\AclMapper;
|
||||||
|
use OCA\Deck\Db\AssignedUsersMapper;
|
||||||
use OCA\Deck\Db\IPermissionMapper;
|
use OCA\Deck\Db\IPermissionMapper;
|
||||||
use OCA\Deck\Db\Label;
|
use OCA\Deck\Db\Label;
|
||||||
use OCA\Deck\Notification\NotificationHelper;
|
use OCA\Deck\Notification\NotificationHelper;
|
||||||
|
@ -43,6 +44,7 @@ class BoardService {
|
||||||
private $l10n;
|
private $l10n;
|
||||||
private $permissionService;
|
private $permissionService;
|
||||||
private $notificationHelper;
|
private $notificationHelper;
|
||||||
|
private $assignedUsersMapper;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
BoardMapper $boardMapper,
|
BoardMapper $boardMapper,
|
||||||
|
@ -50,7 +52,8 @@ class BoardService {
|
||||||
LabelMapper $labelMapper,
|
LabelMapper $labelMapper,
|
||||||
AclMapper $aclMapper,
|
AclMapper $aclMapper,
|
||||||
PermissionService $permissionService,
|
PermissionService $permissionService,
|
||||||
NotificationHelper $notificationHelper
|
NotificationHelper $notificationHelper,
|
||||||
|
AssignedUsersMapper $assignedUsersMapper
|
||||||
) {
|
) {
|
||||||
$this->boardMapper = $boardMapper;
|
$this->boardMapper = $boardMapper;
|
||||||
$this->labelMapper = $labelMapper;
|
$this->labelMapper = $labelMapper;
|
||||||
|
@ -58,6 +61,7 @@ class BoardService {
|
||||||
$this->l10n = $l10n;
|
$this->l10n = $l10n;
|
||||||
$this->permissionService = $permissionService;
|
$this->permissionService = $permissionService;
|
||||||
$this->notificationHelper = $notificationHelper;
|
$this->notificationHelper = $notificationHelper;
|
||||||
|
$this->assignedUsersMapper = $assignedUsersMapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function findAll($userInfo) {
|
public function findAll($userInfo) {
|
||||||
|
@ -243,6 +247,12 @@ class BoardService {
|
||||||
/** @var Acl $acl */
|
/** @var Acl $acl */
|
||||||
$acl = $this->aclMapper->find($id);
|
$acl = $this->aclMapper->find($id);
|
||||||
$this->boardMapper->mapAcl($acl);
|
$this->boardMapper->mapAcl($acl);
|
||||||
|
if ($acl->getType() === Acl::PERMISSION_TYPE_USER) {
|
||||||
|
$assignements = $this->assignedUsersMapper->findByUserId($acl->getParticipant());
|
||||||
|
foreach($assignements as $assignement) {
|
||||||
|
$this->assignedUsersMapper->delete($assignement);
|
||||||
|
}
|
||||||
|
}
|
||||||
return $this->aclMapper->delete($acl);
|
return $this->aclMapper->delete($acl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче