| | <?php |
| |
|
| | namespace Kanboard\Core\Security; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | class AccessMap |
| | { |
| | |
| | |
| | |
| | |
| | |
| | |
| | private $defaultRole = ''; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | private $hierarchy = array(); |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | private $map = array(); |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function setDefaultRole($role) |
| | { |
| | $this->defaultRole = $role; |
| | return $this; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function setRoleHierarchy($role, array $subroles) |
| | { |
| | foreach ($subroles as $subrole) { |
| | if (isset($this->hierarchy[$subrole])) { |
| | $this->hierarchy[$subrole][] = $role; |
| | } else { |
| | $this->hierarchy[$subrole] = array($role); |
| | } |
| | } |
| |
|
| | return $this; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getRoleHierarchy($role) |
| | { |
| | $roles = array($role); |
| |
|
| | if (isset($this->hierarchy[$role])) { |
| | $roles = array_merge($roles, $this->hierarchy[$role]); |
| | } |
| |
|
| | return $roles; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getHighestRole(array $roles) |
| | { |
| | $rank = array(); |
| |
|
| | foreach ($roles as $role) { |
| | $rank[$role] = count($this->getRoleHierarchy($role)); |
| | } |
| |
|
| | asort($rank); |
| |
|
| | return key($rank); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function add($controller, $methods, $role) |
| | { |
| | if (is_array($methods)) { |
| | foreach ($methods as $method) { |
| | $this->addRule($controller, $method, $role); |
| | } |
| | } else { |
| | $this->addRule($controller, $methods, $role); |
| | } |
| |
|
| | return $this; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | private function addRule($controller, $method, $role) |
| | { |
| | $controller = strtolower($controller); |
| | $method = strtolower($method); |
| |
|
| | if (! isset($this->map[$controller])) { |
| | $this->map[$controller] = array(); |
| | } |
| |
|
| | $this->map[$controller][$method] = $role; |
| |
|
| | return $this; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getRoles($controller, $method) |
| | { |
| | $controller = strtolower($controller); |
| | $method = strtolower($method); |
| |
|
| | foreach (array($method, '*') as $key) { |
| | if (isset($this->map[$controller][$key])) { |
| | return $this->getRoleHierarchy($this->map[$controller][$key]); |
| | } |
| | } |
| |
|
| | return $this->getRoleHierarchy($this->defaultRole); |
| | } |
| | } |
| |
|