Allow urls without project_id
This commit is contained in:
@@ -165,16 +165,17 @@ abstract class Base
|
|||||||
$this->container['dispatcher']->dispatch('session.bootstrap', new Event);
|
$this->container['dispatcher']->dispatch('session.bootstrap', new Event);
|
||||||
|
|
||||||
if (! $this->acl->isPublicAction($controller, $action)) {
|
if (! $this->acl->isPublicAction($controller, $action)) {
|
||||||
$this->handleAuthenticatedUser($controller, $action);
|
$this->handleAuthentication($controller, $action);
|
||||||
|
$this->handleAuthorization($controller, $action);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check page access and authentication
|
* Check authentication
|
||||||
*
|
*
|
||||||
* @access public
|
* @access public
|
||||||
*/
|
*/
|
||||||
public function handleAuthenticatedUser($controller, $action)
|
public function handleAuthentication($controller, $action)
|
||||||
{
|
{
|
||||||
if (! $this->authentication->isAuthenticated()) {
|
if (! $this->authentication->isAuthenticated()) {
|
||||||
|
|
||||||
@@ -184,8 +185,24 @@ abstract class Base
|
|||||||
|
|
||||||
$this->response->redirect('?controller=user&action=login&redirect_query='.urlencode($this->request->getQueryString()));
|
$this->response->redirect('?controller=user&action=login&redirect_query='.urlencode($this->request->getQueryString()));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (! $this->acl->isAllowed($controller, $action, $this->request->getIntegerParam('project_id', 0))) {
|
/**
|
||||||
|
* Check page access and authorization
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
public function handleAuthorization($controller, $action)
|
||||||
|
{
|
||||||
|
$project_id = $this->request->getIntegerParam('project_id');
|
||||||
|
$task_id = $this->request->getIntegerParam('task_id');
|
||||||
|
|
||||||
|
// Allow urls without "project_id"
|
||||||
|
if ($task_id > 0 && $project_id === 0) {
|
||||||
|
$project_id = $this->taskFinder->getProjectId($task_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $this->acl->isAllowed($controller, $action, $project_id)) {
|
||||||
$this->forbidden();
|
$this->forbidden();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -287,7 +304,7 @@ abstract class Base
|
|||||||
{
|
{
|
||||||
$task = $this->taskFinder->getDetails($this->request->getIntegerParam('task_id'));
|
$task = $this->taskFinder->getDetails($this->request->getIntegerParam('task_id'));
|
||||||
|
|
||||||
if (! $task || $task['project_id'] != $this->request->getIntegerParam('project_id')) {
|
if (! $task) {
|
||||||
$this->notfound();
|
$this->notfound();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -172,6 +172,18 @@ class TaskFinder extends Base
|
|||||||
return $tasks;
|
return $tasks;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get project id for a given task
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @param integer $task_id Task id
|
||||||
|
* @return integer
|
||||||
|
*/
|
||||||
|
public function getProjectId($task_id)
|
||||||
|
{
|
||||||
|
return (int) $this->db->table(Task::TABLE)->eq('id', $task_id)->findOneColumn('project_id') ?: 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetch a task by the id
|
* Fetch a task by the id
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user