CAccessControlFilter
| Пакет | system.web.auth |
|---|---|
| Наследование | class CAccessControlFilter » CFilter » CComponent |
| Реализует | IFilter |
| С | 1.0 |
| Исходный код | framework/web/auth/CAccessControlFilter.php |
CAccessControlFilter выполняет проверки авторизации для указанных действий.
Включив этот фильтр, можно проверить разрешения доступа к действиям контроллера. Если пользователь не заблокирован ни одним из правил безопасности или не разрешен явно, он сможет получить доступ к действию.
Для максимальной безопасности рекомендуется добавить
Для указания правил доступа установите свойство rules, которое должно быть массивом правил. Каждое правило задается как массив следующей структуры:
Включив этот фильтр, можно проверить разрешения доступа к действиям контроллера. Если пользователь не заблокирован ни одним из правил безопасности или не разрешен явно, он сможет получить доступ к действию.
Для максимальной безопасности рекомендуется добавить
array('deny') как последнее правило в списке, чтобы все действия по умолчанию были запрещены. Для указания правил доступа установите свойство rules, которое должно быть массивом правил. Каждое правило задается как массив следующей структуры:
array(
'allow', // or 'deny'
// optional, list of action IDs (case insensitive) that this rule applies to
// if not specified or empty, rule applies to all actions
'actions'=>array('edit', 'delete'),
// optional, list of controller IDs (case insensitive) that this rule applies to
'controllers'=>array('post', 'admin/user'),
// optional, list of usernames (case insensitive) that this rule applies to
// Use * to represent all users, ? guest users, and @ authenticated users
'users'=>array('thomas', 'kevin'),
// optional, list of roles (case sensitive!) that this rule applies to.
'roles'=>array('admin', 'editor'),
// since version 1.1.11 you can pass parameters for RBAC bizRules
'roles'=>array('updateTopic'=>array('topic'=>$topic))
// optional, list of IP address/patterns that this rule applies to
// e.g. 127.0.0.1, 127.0.0.*
'ips'=>array('127.0.0.1'),
// optional, list of request types (case insensitive) that this rule applies to
'verbs'=>array('GET', 'POST'),
// optional, a PHP expression whose value indicates whether this rule applies
// The PHP expression will be evaluated using evaluateExpression.
// A PHP expression can be any PHP code that has a value. To learn more about what an expression is,
// please refer to the php manual.
'expression'=>'!$user->isGuest && $user->level==2',
// optional, the customized error message to be displayed
// This option is available since version 1.1.1.
'message'=>'Access Denied.',
// optional, the denied method callback name, that will be called once the
// access is denied, instead of showing the customized error message. It can also be
// a valid PHP callback, including class method name (array(ClassName/Object, MethodName)),
// or anonymous function (PHP 5.3.0+). The function/method signature should be as follows:
// function foo($user, $rule) { ... }
// where $user is the current application user object and $rule is this access rule.
// This option is available since version 1.1.11.
'deniedCallback'=>'redirectToDeniedMethod',
)
Свойства публичные
| Свойство | Тип | Описание | Определено в |
|---|---|---|---|
| message | строка | сообщение об ошибке, которое будет отображено при неудачной авторизации. | CAccessControlFilter |
| rules | массив | список правил доступа. | CAccessControlFilter |
Методы публичные
| Метод | Описание | Определено в |
|---|---|---|
| __call() | Вызывает именованный метод, который не является методом класса. | CComponent |
| __get() | Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. | CComponent |
| __isset() | Проверяет, является ли значение свойства null. | CComponent |
| __set() | Устанавливает значение свойства компонента. | CComponent |
| __unset() | Устанавливает свойство компонента в null. | CComponent |
| asa() | Возвращает объект поведения с заданным именем. | CComponent |
| attachBehavior() | Присоединяет поведение к этому компоненту. | CComponent |
| attachBehaviors() | Присоединяет список поведений к компоненту. | CComponent |
| attachEventHandler() | Присоединяет обработчик событий к событию. | CComponent |
| canGetProperty() | Определяет, можно ли прочитать свойство. | CComponent |
| canSetProperty() | Определяет, можно ли установить свойство. | CComponent |
| detachBehavior() | Отсоединяет поведение от компонента. | CComponent |
| detachBehaviors() | Отсоединяет все поведения от компонента. | CComponent |
| detachEventHandler() | Отсоединяет существующий обработчик событий. | CComponent |
| disableBehavior() | Отключает присоединённое поведение. | CComponent |
| disableBehaviors() | Отключает все присоединенные к этому компоненту поведения. | CComponent |
| enableBehavior() | Включает присоединённое поведение. | CComponent |
| enableBehaviors() | Включает все присоединённые к этому компоненту поведения. | CComponent |
| evaluateExpression() | Вычисляет PHP выражение или обратный вызов в контексте этого компонента. | CComponent |
| filter() | Выполняет фильтрацию. | CFilter |
| getEventHandlers() | Возвращает список присоединённых обработчиков событий для события. | CComponent |
| getRules() | Возвращает список правил доступа. | CAccessControlFilter |
| hasEvent() | Определяет, определено ли событие. | CComponent |
| hasEventHandler() | Проверяет, есть ли у именованного события присоединённые обработчики. | CComponent |
| hasProperty() | Определяет, определено ли свойство. | CComponent |
| init() | Инициализирует фильтр. | CFilter |
| raiseEvent() | Вызывает событие. | CComponent |
| setRules() | Устанавливает список правил доступа. | CAccessControlFilter |
Методы защищённые
| Метод | Описание | Определено в |
|---|---|---|
| accessDenied() | Запрещает доступ пользователя. | CAccessControlFilter |
| postFilter() | Выполняет фильтрацию после действия. | CFilter |
| preFilter() | Выполняет фильтрацию до действия. | CAccessControlFilter |
| resolveErrorMessage() | Разрешает сообщение об ошибке для отображения. | CAccessControlFilter |
Подробное описание свойств
message свойство (доступно с версии 1.1.1)
public string $message;
сообщение об ошибке, которое будет отображено при неудачной авторизации. Это свойство может быть переопределено отдельным правилом доступа через CAccessRule::message. Если это свойство не установлено, будет отображено сообщение об ошибке по умолчанию.
rules свойство
public array getRules()
public void setRules(array $rules)
список правил доступа.
Подробное описание методов
accessDenied() метод
protected void accessDenied(IWebUser $user, string $message) | ||
| $user | IWebUser | текущий пользователь |
| $message | строка | сообщение об ошибке для отображения |
Исходный код: framework/web/auth/CAccessControlFilter.php#178 (показать)
protected function accessDenied($user,$message)
{
if($user->getIsGuest())
$user->loginRequired();
else
throw new CHttpException(403,$message);
}
Запрещает доступ пользователя. Этот метод вызывается, когда проверка доступа завершается неудачно.
getRules() метод
public array getRules() | ||
| {возвращает} | массив | список правил доступа. |
Исходный код: framework/web/auth/CAccessControlFilter.php#94 (показать)
public function getRules()
{
return $this->_rules;
}
preFilter() метод
protected boolean preFilter(CFilterChain $filterChain) | ||
| $filterChain | CFilterChain | цепь фильтров, на которой находится фильтр. |
| {возвращает} | логическое значение | следует ли продолжить процесс фильтрации и выполнить действие. |
Исходный код: framework/web/auth/CAccessControlFilter.php#128 (показать)
protected function preFilter($filterChain)
{
$app=Yii::app();
$request=$app->getRequest();
$user=$app->getUser();
$verb=$request->getRequestType();
$ip=$request->getUserHostAddress();
foreach($this->getRules() as $rule)
{
if(($allow=$rule->isUserAllowed($user,$filterChain->controller,$filterChain->action,$ip,$verb))>0) // allowed
break;
elseif($allow<0) // denied
{
if(isset($rule->deniedCallback))
call_user_func($rule->deniedCallback, $rule);
else
$this->accessDenied($user,$this->resolveErrorMessage($rule));
return false;
}
}
return true;
}
Выполняет предварительный фильтр действий.
resolveErrorMessage() метод (доступен с версии v1.1.1)
protected string resolveErrorMessage(CAccessRule $rule) | ||
| $rule | CAccessRule | правило доступа |
| {return} | строка | сообщение об ошибке |
Исходный код: framework/web/auth/CAccessControlFilter.php#161 (показать)
protected function resolveErrorMessage($rule)
{
if($rule->message!==null)
return $rule->message;
elseif($this->message!==null)
return $this->message;
else
return Yii::t('yii','You are not authorized to perform this action.');
}
Решает сообщение об ошибке, которое должно быть отображено. Этот метод проверит сообщение и CAccessRule::message, чтобы определить, какое сообщение об ошибке отобразить.
setRules() метод
public void setRules(array $rules) | ||
| $rules | массив | список правил доступа. |
Исходный код: framework/web/auth/CAccessControlFilter.php#102 (показать)
public function setRules($rules)
{
foreach($rules as $rule)
{
if(is_array($rule) && isset($rule[0]))
{
$r=new CAccessRule;
$r->allow=$rule[0]==='allow';
foreach(array_slice($rule,1) as $name=>$value)
{
if($name==='expression' || $name==='roles' || $name==='message' || $name==='deniedCallback')
$r->$name=$value;
else
$r->$name=array_map('strtolower',$value);
}
$this->_rules[]=$r;
}
}
}
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CAccessControlFilter