diff --git a/lib/Db/Acl.php b/lib/Db/Acl.php index 634eb436b..ea8570c9f 100644 --- a/lib/Db/Acl.php +++ b/lib/Db/Acl.php @@ -5,20 +5,20 @@ * @author Julius Härtl * * @license GNU AGPL version 3 or any later version - * + * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. - * + * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . - * + * */ namespace OCA\Deck\Db; @@ -30,52 +30,77 @@ class Acl extends Entity implements \JsonSerializable { const PERMISSION_SHARE = 2; const PERMISSION_MANAGE = 3; - public $id; - protected $participant; - protected $type; - protected $boardId; - protected $permissionEdit; - protected $permissionShare; - protected $permissionManage; - protected $owner; + const PERMISSION_TYPE_USER = 0; + const PERMISSION_TYPE_GROUP = 1; - public function __construct() { - $this->addType('id','integer'); - $this->addType('boardId','integer'); - $this->addType('permissionEdit', 'boolean'); - $this->addType('permissionShare', 'boolean'); - $this->addType('permissionManage', 'boolean'); - $this->addType('owner', 'boolean'); - $this->addRelation('owner'); + public $id; + protected $participant; + protected $type; + protected $boardId; + protected $permissionEdit = false; + protected $permissionShare = false; + protected $permissionManage = false; + protected $owner = false; + + public function __construct() { + $this->addType('id', 'integer'); + $this->addType('boardId', 'integer'); + $this->addType('permissionEdit', 'boolean'); + $this->addType('permissionShare', 'boolean'); + $this->addType('permissionManage', 'boolean'); + $this->addType('owner', 'boolean'); + $this->addType('type', 'integer'); + $this->addRelation('owner'); $this->setPermissionEdit(false); $this->setPermissionShare(false); $this->setPermissionManage(false); - } + } - public function getPermission($permission) { - switch ($permission) { - case Acl::PERMISSION_READ: - return true; - case Acl::PERMISSION_EDIT: - return $this->getPermissionEdit(); - case Acl::PERMISSION_SHARE: - return $this->getPermissionShare(); - case Acl::PERMISSION_MANAGE: - return $this->getPermissionManage(); - } - return false; - } + public function getPermission($permission) { + switch ($permission) { + case Acl::PERMISSION_READ: + return true; + case Acl::PERMISSION_EDIT: + return $this->getPermissionEdit(); + case Acl::PERMISSION_SHARE: + return $this->getPermissionShare(); + case Acl::PERMISSION_MANAGE: + return $this->getPermissionManage(); + } + return false; + } - public function jsonSerialize() { - return [ - 'id' => $this->id, - 'participant' => $this->participant, - 'type' => $this->type, - 'boardId' => $this->boardId, - 'permissionEdit' => $this->permissionEdit, - 'permissionShare' => $this->permissionShare, - 'permissionManage' => $this->permissionManage, - 'owner' => $this->owner - ]; - } + public function jsonSerialize() { + return [ + 'id' => $this->id, + 'participant' => $this->participant, + 'type' => $this->getType(), + 'boardId' => $this->boardId, + 'permissionEdit' => $this->getPermissionEdit(), + 'permissionShare' => $this->getPermissionShare(), + 'permissionManage' => $this->getPermissionManage(), + 'owner' => $this->getOwner() + ]; + } + + /* + * FIXME: migrate other code to const PERMISSION_TYPE_ instead of strings + * iirc js uses those strings as well + */ + public function getType() { + if ($this->type === Acl::PERMISSION_TYPE_GROUP) { + return 'group'; + } + return 'user'; + } + + public function setType($type) { + if ($type === 'group') { + $typeInt = Acl::PERMISSION_TYPE_GROUP; + } else { + $typeInt = Acl::PERMISSION_TYPE_USER; + } + $this->markFieldUpdated('type'); + $this->type = $typeInt; + } } \ No newline at end of file diff --git a/tests/unit/Db/AclTest.php b/tests/unit/Db/AclTest.php index 200cb208e..8641a0500 100644 --- a/tests/unit/Db/AclTest.php +++ b/tests/unit/Db/AclTest.php @@ -30,9 +30,9 @@ class AclTest extends \PHPUnit_Framework_TestCase { $acl->setParticipant("admin"); $acl->setType("user"); $acl->setBoardId(1); - $acl->setPermissionEdit(1); - $acl->setPermissionShare(1); - $acl->setPermissionManage(1); + $acl->setPermissionEdit(true); + $acl->setPermissionShare(true); + $acl->setPermissionManage(true); return $acl; } private function createAclGroup() { @@ -41,9 +41,9 @@ class AclTest extends \PHPUnit_Framework_TestCase { $acl->setParticipant("administrators"); $acl->setType("group"); $acl->setBoardId(1); - $acl->setPermissionEdit(1); - $acl->setPermissionShare(1); - $acl->setPermissionManage(1); + $acl->setPermissionEdit(true); + $acl->setPermissionShare(true); + $acl->setPermissionManage(true); return $acl; } public function testJsonSerialize() { @@ -53,10 +53,10 @@ class AclTest extends \PHPUnit_Framework_TestCase { 'participant' => 'admin', 'type' => 'user', 'boardId' => 1, - 'permissionEdit' => 1, - 'permissionShare' => 1, - 'permissionManage' => 1, - 'owner' => 0 + 'permissionEdit' => true, + 'permissionShare' => true, + 'permissionManage' => true, + 'owner' => false ], $acl->jsonSerialize()); $acl = $this->createAclGroup(); $this->assertEquals([ @@ -64,10 +64,10 @@ class AclTest extends \PHPUnit_Framework_TestCase { 'participant' => 'administrators', 'type' => 'group', 'boardId' => 1, - 'permissionEdit' => 1, - 'permissionShare' => 1, - 'permissionManage' => 1, - 'owner' => 0 + 'permissionEdit' => true, + 'permissionShare' => true, + 'permissionManage' => true, + 'owner' => false ], $acl->jsonSerialize()); } public function testSetOwner() { @@ -78,10 +78,10 @@ class AclTest extends \PHPUnit_Framework_TestCase { 'participant' => 'admin', 'type' => 'user', 'boardId' => 1, - 'permissionEdit' => 1, - 'permissionShare' => 1, - 'permissionManage' => 1, - 'owner' => 1 + 'permissionEdit' => true, + 'permissionShare' => true, + 'permissionManage' => true, + 'owner' => true ], $acl->jsonSerialize()); } @@ -92,9 +92,9 @@ class AclTest extends \PHPUnit_Framework_TestCase { $this->assertEquals(true, $acl->getPermission(Acl::PERMISSION_EDIT)); $this->assertEquals(true, $acl->getPermission(Acl::PERMISSION_MANAGE)); $this->assertEquals(true, $acl->getPermission(Acl::PERMISSION_SHARE)); - $acl->setPermissionEdit(0); - $acl->setPermissionShare(0); - $acl->setPermissionManage(0); + $acl->setPermissionEdit(false); + $acl->setPermissionShare(false); + $acl->setPermissionManage(false); $this->assertEquals(true, $acl->getPermission(Acl::PERMISSION_READ)); $this->assertEquals(false, $acl->getPermission(Acl::PERMISSION_EDIT)); $this->assertEquals(false, $acl->getPermission(Acl::PERMISSION_MANAGE));