From 9b82779513b564da35b3e5509917234cda8be85f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Wed, 28 Feb 2018 17:36:28 +0100 Subject: [PATCH 1/4] Remove deleted users from assignments MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- lib/AppInfo/Application.php | 8 ++++++++ lib/Db/AssignedUsersMapper.php | 6 ++++++ lib/Service/BoardService.php | 12 +++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index 29b367db7..e8f89e6f7 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -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 */ diff --git a/lib/Db/AssignedUsersMapper.php b/lib/Db/AssignedUsersMapper.php index d2500043c..f1797b0da 100644 --- a/lib/Db/AssignedUsersMapper.php +++ b/lib/Db/AssignedUsersMapper.php @@ -50,6 +50,12 @@ class AssignedUsersMapper extends DeckMapper implements IPermissionMapper { 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) { return $this->cardMapper->isOwner($userId, $cardId); diff --git a/lib/Service/BoardService.php b/lib/Service/BoardService.php index 072f7c1f5..36be5c341 100644 --- a/lib/Service/BoardService.php +++ b/lib/Service/BoardService.php @@ -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); } From 691bbda0560e67814257fa764da00e33fef1e2aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Wed, 28 Feb 2018 17:37:19 +0100 Subject: [PATCH 2/4] Update view when removing sharees and track by correct property MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- js/controller/BoardController.js | 5 ++++- templates/part.board.sidebarView.php | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/js/controller/BoardController.js b/js/controller/BoardController.js index 69254c9c8..e3d4f91ec 100644 --- a/js/controller/BoardController.js +++ b/js/controller/BoardController.js @@ -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); diff --git a/templates/part.board.sidebarView.php b/templates/part.board.sidebarView.php index 8d44d34dd..45c2d394c 100644 --- a/templates/part.board.sidebarView.php +++ b/templates/part.board.sidebarView.php @@ -44,7 +44,7 @@ {{ boardservice.getCurrent().owner.displayname }} -
  • +
  • From 31965bf40c67f597599f5a9a6d0542a2a45bd9f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Fri, 2 Mar 2018 18:08:53 +0100 Subject: [PATCH 3/4] Fix tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- tests/unit/Service/BoardServiceTest.php | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/tests/unit/Service/BoardServiceTest.php b/tests/unit/Service/BoardServiceTest.php index ba0221742..c7b89e79f 100644 --- a/tests/unit/Service/BoardServiceTest.php +++ b/tests/unit/Service/BoardServiceTest.php @@ -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) From d362e0ad0eae4a650049b21b8742d0df7dc2d230 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Fri, 2 Mar 2018 19:16:03 +0100 Subject: [PATCH 4/4] No typehinting in deck yet MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- lib/Db/AssignedUsersMapper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Db/AssignedUsersMapper.php b/lib/Db/AssignedUsersMapper.php index f1797b0da..5edab10d0 100644 --- a/lib/Db/AssignedUsersMapper.php +++ b/lib/Db/AssignedUsersMapper.php @@ -50,7 +50,7 @@ class AssignedUsersMapper extends DeckMapper implements IPermissionMapper { return $users; } - public function findByUserId(string $uid): array { + public function findByUserId($uid) { $sql = 'SELECT * FROM `*PREFIX*deck_assigned_users` ' . 'WHERE `participant` = ?'; return $this->findEntities($sql, [$uid]);