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