diff options
author | Gerardo Zamudio <gerardozamudio@users.noreply.github.com> | 2016-02-24 23:48:50 -0600 |
---|---|---|
committer | Gerardo Zamudio <gerardozamudio@users.noreply.github.com> | 2016-02-24 23:48:50 -0600 |
commit | e4de6b3898b64b26d29aff31f21df5fda8055686 (patch) | |
tree | 575f8a65440f291d70a070d168eafca8c82a6459 /doc/plugin-authorization-architecture.markdown | |
parent | d9ffbea174ea6524d0a22f8375ca8b3aa04a3c96 (diff) | |
parent | a6540bc604c837d92c9368540c145606723e97f7 (diff) |
Merge pull request #1 from fguillot/master
Update from upstream
Diffstat (limited to 'doc/plugin-authorization-architecture.markdown')
-rw-r--r-- | doc/plugin-authorization-architecture.markdown | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/doc/plugin-authorization-architecture.markdown b/doc/plugin-authorization-architecture.markdown new file mode 100644 index 00000000..24acee17 --- /dev/null +++ b/doc/plugin-authorization-architecture.markdown @@ -0,0 +1,39 @@ +Authorization Architecture +========================== + +Kanboard [supports multiple roles](roles.markdown) at the application level and at the project level. + +Authorization Workflow +---------------------- + +For each HTTP request: + +1. Authorize or not access to the resource based on the application access list +2. If the resource is for a project (board, task...): + 1. Fetch user role for this project + 2. 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: + +```php +// All methods of the class MyController: +$this->projectAccessMap->add('MyController', '*', Role::PROJECT_MANAGER); + +// All some 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. |