зеркало из https://github.com/nextcloud/deck.git
Merge pull request #432 from nextcloud/auto-remove-assignments
Auto remove assignments
This commit is contained in:
Коммит
ad9ce6cd26
|
@ -214,7 +214,10 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
|
|||
$scope.status.addSharee = null;
|
||||
};
|
||||
$scope.aclDelete = function (acl) {
|
||||
BoardService.deleteAcl(acl);
|
||||
BoardService.deleteAcl(acl).then(function(data) {
|
||||
$scope.loadDefault();
|
||||
$scope.refreshData();
|
||||
});
|
||||
};
|
||||
$scope.aclUpdate = function (acl) {
|
||||
BoardService.updateAcl(acl);
|
||||
|
|
|
@ -25,6 +25,7 @@ namespace OCA\Deck\AppInfo;
|
|||
|
||||
use OCA\Deck\Db\Acl;
|
||||
use OCA\Deck\Db\AclMapper;
|
||||
use OCA\Deck\Db\AssignedUsersMapper;
|
||||
use OCA\Deck\Notification\Notifier;
|
||||
use OCP\AppFramework\App;
|
||||
use OCA\Deck\Middleware\SharingMiddleware;
|
||||
|
@ -65,12 +66,19 @@ class Application extends App {
|
|||
/** @var IUserManager $userManager */
|
||||
$userManager = $server->getUserManager();
|
||||
$userManager->listen('\OC\User', 'postDelete', function(IUser $user) use ($container) {
|
||||
// delete existing acl entries for deleted user
|
||||
/** @var AclMapper $aclMapper */
|
||||
$aclMapper = $container->query(AclMapper::class);
|
||||
$acls = $aclMapper->findByParticipant(Acl::PERMISSION_TYPE_USER, $user->getUID());
|
||||
foreach ($acls as $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 */
|
||||
|
|
|
@ -50,6 +50,12 @@ class AssignedUsersMapper extends DeckMapper implements IPermissionMapper {
|
|||
return $users;
|
||||
}
|
||||
|
||||
public function findByUserId($uid) {
|
||||
$sql = 'SELECT * FROM `*PREFIX*deck_assigned_users` ' .
|
||||
'WHERE `participant` = ?';
|
||||
return $this->findEntities($sql, [$uid]);
|
||||
}
|
||||
|
||||
|
||||
public function 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\AclMapper;
|
||||
use OCA\Deck\Db\AssignedUsersMapper;
|
||||
use OCA\Deck\Db\IPermissionMapper;
|
||||
use OCA\Deck\Db\Label;
|
||||
use OCA\Deck\Notification\NotificationHelper;
|
||||
|
@ -43,6 +44,7 @@ class BoardService {
|
|||
private $l10n;
|
||||
private $permissionService;
|
||||
private $notificationHelper;
|
||||
private $assignedUsersMapper;
|
||||
|
||||
public function __construct(
|
||||
BoardMapper $boardMapper,
|
||||
|
@ -50,7 +52,8 @@ class BoardService {
|
|||
LabelMapper $labelMapper,
|
||||
AclMapper $aclMapper,
|
||||
PermissionService $permissionService,
|
||||
NotificationHelper $notificationHelper
|
||||
NotificationHelper $notificationHelper,
|
||||
AssignedUsersMapper $assignedUsersMapper
|
||||
) {
|
||||
$this->boardMapper = $boardMapper;
|
||||
$this->labelMapper = $labelMapper;
|
||||
|
@ -58,6 +61,7 @@ class BoardService {
|
|||
$this->l10n = $l10n;
|
||||
$this->permissionService = $permissionService;
|
||||
$this->notificationHelper = $notificationHelper;
|
||||
$this->assignedUsersMapper = $assignedUsersMapper;
|
||||
}
|
||||
|
||||
public function findAll($userInfo) {
|
||||
|
@ -243,6 +247,12 @@ class BoardService {
|
|||
/** @var Acl $acl */
|
||||
$acl = $this->aclMapper->find($id);
|
||||
$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);
|
||||
}
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@
|
|||
{{ boardservice.getCurrent().owner.displayname }}
|
||||
</span>
|
||||
</li>
|
||||
<li ng-repeat="acl in boardservice.getCurrent().acl track by $index">
|
||||
<li ng-repeat="acl in boardservice.getCurrent().acl track by acl.participant.primaryKey">
|
||||
<span class="icon-loading-small" style="display:none;" title="<?php p($l->t('Loading')); ?>"></span>
|
||||
<div class="avatardiv" avatar data-contactsmenu="true" data-user="{{ acl.participant.uid }}" data-displayname="{{ acl.participant.displayname }}" ng-if="acl.type==OC.Share.SHARE_TYPE_USER"></div>
|
||||
<div class="avatardiv" ng-if="acl.type==OC.Share.SHARE_TYPE_GROUP"><i class="icon icon-{{aclTypeString(acl)}}" title="<?php p($l->t('Access for')); ?> {{aclTypeString(acl)}}"></i></div>
|
||||
|
|
|
@ -26,6 +26,8 @@ namespace OCA\Deck\Service;
|
|||
use OC\L10N\L10N;
|
||||
use OCA\Deck\Db\Acl;
|
||||
use OCA\Deck\Db\AclMapper;
|
||||
use OCA\Deck\Db\AssignedUsers;
|
||||
use OCA\Deck\Db\AssignedUsersMapper;
|
||||
use OCA\Deck\Db\Board;
|
||||
use OCA\Deck\Db\BoardMapper;
|
||||
use OCA\Deck\Db\LabelMapper;
|
||||
|
@ -49,6 +51,8 @@ class BoardServiceTest extends TestCase {
|
|||
private $permissionService;
|
||||
/** @var NotificationHelper */
|
||||
private $notificationHelper;
|
||||
/** @var AssignedUsersMapper */
|
||||
private $assignedUsersMapper;
|
||||
|
||||
private $userId = 'admin';
|
||||
|
||||
|
@ -60,6 +64,7 @@ class BoardServiceTest extends TestCase {
|
|||
$this->labelMapper = $this->createMock(LabelMapper::class);
|
||||
$this->permissionService = $this->createMock(PermissionService::class);
|
||||
$this->notificationHelper = $this->createMock(NotificationHelper::class);
|
||||
$this->assignedUsersMapper = $this->createMock(AssignedUsersMapper::class);
|
||||
|
||||
$this->service = new BoardService(
|
||||
$this->boardMapper,
|
||||
|
@ -67,7 +72,8 @@ class BoardServiceTest extends TestCase {
|
|||
$this->labelMapper,
|
||||
$this->aclMapper,
|
||||
$this->permissionService,
|
||||
$this->notificationHelper
|
||||
$this->notificationHelper,
|
||||
$this->assignedUsersMapper
|
||||
);
|
||||
|
||||
$user = $this->createMock(IUser::class);
|
||||
|
@ -224,7 +230,7 @@ class BoardServiceTest extends TestCase {
|
|||
public function testDeleteAcl() {
|
||||
$acl = new Acl();
|
||||
$acl->setBoardId(123);
|
||||
$acl->setType('user');
|
||||
$acl->setType(Acl::PERMISSION_TYPE_USER);
|
||||
$acl->setParticipant('admin');
|
||||
$acl->setPermissionEdit(true);
|
||||
$acl->setPermissionShare(true);
|
||||
|
@ -233,6 +239,15 @@ class BoardServiceTest extends TestCase {
|
|||
->method('find')
|
||||
->with(123)
|
||||
->willReturn($acl);
|
||||
$assignment = new AssignedUsers();
|
||||
$assignment->setParticipant('admin');
|
||||
$this->assignedUsersMapper->expects($this->once())
|
||||
->method('findByUserId')
|
||||
->with('admin')
|
||||
->willReturn([$assignment]);
|
||||
$this->assignedUsersMapper->expects($this->once())
|
||||
->method('delete')
|
||||
->with($assignment);
|
||||
$this->aclMapper->expects($this->once())
|
||||
->method('delete')
|
||||
->with($acl)
|
||||
|
|
Загрузка…
Ссылка в новой задаче