Add API calls to manage tags
This commit is contained in:
@@ -23,13 +23,13 @@ class ProjectAuthorization extends Base
|
||||
protected function checkProjectPermission($class, $method, $project_id)
|
||||
{
|
||||
if (empty($project_id)) {
|
||||
throw new AccessDeniedException('Project not found');
|
||||
throw new AccessDeniedException('Project Not Found');
|
||||
}
|
||||
|
||||
$role = $this->projectUserRoleModel->getUserRole($project_id, $this->userSession->getId());
|
||||
|
||||
if (! $this->apiProjectAuthorization->isAllowed($class, $method, $role)) {
|
||||
throw new AccessDeniedException('Project access denied');
|
||||
throw new AccessDeniedException('Project Access Denied');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
23
app/Api/Authorization/TagAuthorization.php
Normal file
23
app/Api/Authorization/TagAuthorization.php
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace Kanboard\Api\Authorization;
|
||||
|
||||
/**
|
||||
* Class TagAuthorization
|
||||
*
|
||||
* @package Kanboard\Api\Authorization
|
||||
* @author Frederic Guillot
|
||||
*/
|
||||
class TagAuthorization extends ProjectAuthorization
|
||||
{
|
||||
public function check($class, $method, $tag_id)
|
||||
{
|
||||
if ($this->userSession->isLogged()) {
|
||||
$tag = $this->tagModel->getById($tag_id);
|
||||
|
||||
if (! empty($tag)) {
|
||||
$this->checkProjectPermission($class, $method, $tag['project_id']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,10 +10,10 @@ namespace Kanboard\Api\Authorization;
|
||||
*/
|
||||
class TaskAuthorization extends ProjectAuthorization
|
||||
{
|
||||
public function check($class, $method, $category_id)
|
||||
public function check($class, $method, $task_id)
|
||||
{
|
||||
if ($this->userSession->isLogged()) {
|
||||
$this->checkProjectPermission($class, $method, $this->taskFinderModel->getProjectId($category_id));
|
||||
$this->checkProjectPermission($class, $method, $this->taskFinderModel->getProjectId($task_id));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
44
app/Api/Procedure/TagProcedure.php
Normal file
44
app/Api/Procedure/TagProcedure.php
Normal file
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace Kanboard\Api\Procedure;
|
||||
|
||||
use Kanboard\Api\Authorization\ProjectAuthorization;
|
||||
use Kanboard\Api\Authorization\TagAuthorization;
|
||||
|
||||
/**
|
||||
* Class TagProcedure
|
||||
*
|
||||
* @package Kanboard\Api\Procedure
|
||||
* @author Frederic Guillot
|
||||
*/
|
||||
class TagProcedure extends BaseProcedure
|
||||
{
|
||||
public function getAllTags()
|
||||
{
|
||||
return $this->tagModel->getAll();
|
||||
}
|
||||
|
||||
public function getTagsByProject($project_id)
|
||||
{
|
||||
ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'getTagsByProject', $project_id);
|
||||
return $this->tagModel->getAllByProject($project_id);
|
||||
}
|
||||
|
||||
public function createTag($project_id, $tag)
|
||||
{
|
||||
ProjectAuthorization::getInstance($this->container)->check($this->getClassName(), 'createTag', $project_id);
|
||||
return $this->tagModel->findOrCreateTag($project_id, $tag);
|
||||
}
|
||||
|
||||
public function updateTag($tag_id, $tag)
|
||||
{
|
||||
TagAuthorization::getInstance($this->container)->check($this->getClassName(), 'updateTag', $tag_id);
|
||||
return $this->tagModel->update($tag_id, $tag);
|
||||
}
|
||||
|
||||
public function removeTag($tag_id)
|
||||
{
|
||||
TagAuthorization::getInstance($this->container)->check($this->getClassName(), 'removeTag', $tag_id);
|
||||
return $this->tagModel->remove($tag_id);
|
||||
}
|
||||
}
|
||||
26
app/Api/Procedure/TaskTagProcedure.php
Normal file
26
app/Api/Procedure/TaskTagProcedure.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace Kanboard\Api\Procedure;
|
||||
|
||||
use Kanboard\Api\Authorization\TaskAuthorization;
|
||||
|
||||
/**
|
||||
* Class TaskTagProcedure
|
||||
*
|
||||
* @package Kanboard\Api\Procedure
|
||||
* @author Frederic Guillot
|
||||
*/
|
||||
class TaskTagProcedure extends BaseProcedure
|
||||
{
|
||||
public function setTaskTags($project_id, $task_id, array $tags)
|
||||
{
|
||||
TaskAuthorization::getInstance($this->container)->check($this->getClassName(), 'setTaskTags', $task_id);
|
||||
return $this->taskTagModel->save($project_id, $task_id, $tags);
|
||||
}
|
||||
|
||||
public function getTaskTags($task_id)
|
||||
{
|
||||
TaskAuthorization::getInstance($this->container)->check($this->getClassName(), 'getTaskTags', $task_id);
|
||||
return $this->taskTagModel->getList($task_id);
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,7 @@ use Kanboard\Api\Procedure\CategoryProcedure;
|
||||
use Kanboard\Api\Procedure\ColumnProcedure;
|
||||
use Kanboard\Api\Procedure\CommentProcedure;
|
||||
use Kanboard\Api\Procedure\ProjectFileProcedure;
|
||||
use Kanboard\Api\Procedure\TagProcedure;
|
||||
use Kanboard\Api\Procedure\TaskExternalLinkProcedure;
|
||||
use Kanboard\Api\Procedure\TaskFileProcedure;
|
||||
use Kanboard\Api\Procedure\GroupProcedure;
|
||||
@@ -25,6 +26,7 @@ use Kanboard\Api\Procedure\SwimlaneProcedure;
|
||||
use Kanboard\Api\Procedure\TaskMetadataProcedure;
|
||||
use Kanboard\Api\Procedure\TaskProcedure;
|
||||
use Kanboard\Api\Procedure\TaskLinkProcedure;
|
||||
use Kanboard\Api\Procedure\TaskTagProcedure;
|
||||
use Kanboard\Api\Procedure\UserProcedure;
|
||||
use Pimple\Container;
|
||||
use Pimple\ServiceProviderInterface;
|
||||
@@ -71,9 +73,11 @@ class ApiProvider implements ServiceProviderInterface
|
||||
->withObject(new TaskLinkProcedure($container))
|
||||
->withObject(new TaskExternalLinkProcedure($container))
|
||||
->withObject(new TaskMetadataProcedure($container))
|
||||
->withObject(new TaskTagProcedure($container))
|
||||
->withObject(new UserProcedure($container))
|
||||
->withObject(new GroupProcedure($container))
|
||||
->withObject(new GroupMemberProcedure($container))
|
||||
->withObject(new TagProcedure($container))
|
||||
->withBeforeMethod('beforeProcedure')
|
||||
;
|
||||
|
||||
|
||||
@@ -210,6 +210,8 @@ class AuthenticationProvider implements ServiceProviderInterface
|
||||
$acl->add('TaskLinkProcedure', '*', Role::PROJECT_MEMBER);
|
||||
$acl->add('TaskExternalLinkProcedure', array('createExternalTaskLink', 'updateExternalTaskLink', 'removeExternalTaskLink'), Role::PROJECT_MEMBER);
|
||||
$acl->add('TaskProcedure', '*', Role::PROJECT_MEMBER);
|
||||
$acl->add('TaskTagProcedure', array('setTaskTags'), Role::PROJECT_MEMBER);
|
||||
$acl->add('TagProcedure', array('createTag', 'updateTag', 'removeTag'), Role::PROJECT_MEMBER);
|
||||
|
||||
return $acl;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user