40 lines
1.2 KiB
PHP
40 lines
1.2 KiB
PHP
<?php
|
||
|
||
/**
|
||
* Фильтр действий
|
||
*/
|
||
namespace ctiso\Filter;
|
||
use ctiso\Filter\UserAccess,
|
||
ctiso\HttpRequest,
|
||
ctiso\Role\User;
|
||
|
||
class ActionAccess
|
||
{
|
||
public $access = array();
|
||
public $processor;
|
||
public $user/*: User*/;
|
||
|
||
function __construct($processor/*: Filter*/, $user) {
|
||
$this->processor = $processor;
|
||
$this->user = $user;
|
||
}
|
||
|
||
/**
|
||
* Проверка доступных действий для пользователя
|
||
* !! Реализация класса проверки действий не должна быть внутри Контроллера!!!
|
||
* Информация о доступе может быть в файле, базе данных и т.д.
|
||
*/
|
||
function checkAction($action) {
|
||
// Импликация !! http://ru.wikipedia.org/wiki/Импликация
|
||
return (!isset($this->access[$action]) || in_array($this->user->access, $this->access[$action]));
|
||
}
|
||
|
||
function execute(HttpRequest $request) {
|
||
$action = $request->getAction();
|
||
if(! $this->checkAction($action)) {
|
||
$request->set('action', 'index');
|
||
$request->setAction('index');
|
||
}
|
||
return $this->processor->execute($request);
|
||
}
|
||
}
|