Authorization Architecture
Kanboard supports multiple roles at the application level and at the project level.
Authorization Workflow
For each HTTP request:
- Authorize or not access to the resource based on the application access list
- If the resource is for a project (board, task…):
- Fetch user role for this project
- Grant/Denied access based on the project access map
Extending Access Map
The Access List (ACL) is based on the controller class name and the method name. The list of access is handled by the class Kanboard\Core\Security\AccessMap
.
There are two access map: one for the application and another one for projects.
- Application access map:
$this->applicationAccessMap
- Project access map:
$this->projectAccessMap
Examples to define a new policy from your plugin:
// All methods of the class MyController:
$this->projectAccessMap->add('MyController', '*', Role::PROJECT_MANAGER);
// Specific methods:
$this->projectAccessMap->add('MyOtherController', array('create', 'save'), Role::PROJECT_MEMBER);
Roles are defined in the class Kanboard\Core\Security\Role
.
The Authorization class (Kanboard\Core\Security\Authorization
) will check the access for each page.