Spec-Zone.ru › Yii 1.1

CAccessControlFilter

Пакет system.web.auth
Наследование class CAccessControlFilter » CFilter » CComponent
Реализует IFilter
С 1.0
Исходный код framework/web/auth/CAccessControlFilter.php
CAccessControlFilter выполняет проверки авторизации для указанных действий.

Включив этот фильтр, можно проверить разрешения доступа к действиям контроллера. Если пользователь не заблокирован ни одним из правил безопасности или не разрешен явно, он сможет получить доступ к действию.

Для максимальной безопасности рекомендуется добавить
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API