Class yii\filters\AccessRule

继承yii\filters\AccessRule » yii\base\Component » yii\base\BaseObject
实现yii\base\Configurable
可用自版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/filters/AccessRule.php

该类表示由 yii\filters\AccessControl 动作过滤器定义的访问规则.

公共属性

隐藏继承的属性

属性类型描述定义在
$actions array 此规则适用的动作ID列表. yii\filters\AccessRule
$allow boolean 这是允许('allow')规则还是拒绝('deny')规则. yii\filters\AccessRule
$behaviors yii\base\Behavior[] 附加到此组件的行为列表. 该属性是只读的. yii\base\Component
$controllers array 此规则适用的控制器ID列表. yii\filters\AccessRule
$denyCallback callable 如果此规则确定应拒绝对当前动作的访问, 则将调用该回调. yii\filters\AccessRule
$ips array 此规则适用的用户 IP 地址列表. yii\filters\AccessRule
$matchCallback callable 一个回调, 将被调用以确定是否应应用此规则. yii\filters\AccessRule
$permissions array 此规则适用的 RBAC(基于角色的访问控制)权限列表. yii\filters\AccessRule
$roleParams array|Closure 传递给 yii\web\User::can() 函数的参数, 用于检查 $roles 中的用户权限. yii\filters\AccessRule
$roles array 此规则适用的角色列表(要求正确配置的用户(User)组件). yii\filters\AccessRule
$verbs array 此规则适用的请求方法列表(eg: GET, POST). yii\filters\AccessRule

公共方法

隐藏继承的方法

方法描述定义在
__call() 调用不是类方法的指定的方法. yii\base\Component
__clone() 在通过克隆现有对象创建对象之后调用此方法. yii\base\Component
__construct() 构造函数. yii\base\BaseObject
__get() 返回组件属性的值. yii\base\Component
__isset() 检查属性是否已设置, 即已定义且不为null. yii\base\Component
__set() 设置组件属性的值. yii\base\Component
__unset() 将组件属性设置为null. yii\base\Component
allows() 检查是否允许 Web 用户执行指定的动作. yii\filters\AccessRule
attachBehavior() 将行为附加到此组件. yii\base\Component
attachBehaviors() 将行为列表附加到组件. yii\base\Component
behaviors() 返回此组件应该具有的行为列表. yii\base\Component
canGetProperty() 返回一个值, 指示属性是否可读取. yii\base\Component
canSetProperty() 返回一个值, 指示属性是否可设置. yii\base\Component
className() 返回此类的完全限定名称. yii\base\BaseObject
detachBehavior() 从组件中分离一个行为. yii\base\Component
detachBehaviors() 分离组件中的所有行为. yii\base\Component
ensureBehaviors() 确保在 behaviors() 中声明的行为已附加到此组件. yii\base\Component
getBehavior() 返回指定的行为对象. yii\base\Component
getBehaviors() 返回附加到此组件的所有行为. yii\base\Component
hasEventHandlers() 返回一个值, 指示是否有任何处理程序附加到指定的事件. yii\base\Component
hasMethod() 返回一个值, 指示方法是否已定义. yii\base\Component
hasProperty() 返回一个值, 指示属性是否已定义. yii\base\Component
init() 初始化对象. yii\base\BaseObject
off() 从该组件分离现有的事件处理程序. yii\base\Component
on() 将事件处理程序附加到事件. yii\base\Component
trigger() 触发事件. yii\base\Component

受保护的方法

隐藏继承的方法

方法描述定义在
matchAction() 判断该规则是否适用于该动作. yii\filters\AccessRule
matchController() 判断该规则是否适用于该控制器. yii\filters\AccessRule
matchCustom() 判断是否应该适用该规则. yii\filters\AccessRule
matchIP() 判断该规则是否适用于该 IP 地址. yii\filters\AccessRule
matchRole() 判断该规则是否适用于该角色. yii\filters\AccessRule
matchVerb() 判断规则是否适用于该请求. yii\filters\AccessRule

属性详情

$actions public 属性

此规则适用的动作ID列表. 比较是区分大小写的. 如果未设置或为空, 则表示此规则适用于所有动作.

public array $actions null
$allow public 属性

这是允许('allow')规则还是拒绝('deny')规则.

public boolean $allow null
$controllers public 属性

此规则适用的控制器ID列表.

比较使用 yii\base\Controller::$uniqueId, 因此每个控制器ID都以模块ID(如果有)为前缀. 对于应用程序中的product控制器, 你可以指定类似['product']的属性; 如果该控制器位于shop模块中, 则应为['shop/product'].

比较是区分大小写的.

如果未设置或为空, 则表示此规则适用于所有控制器.

自版本 2.0.12 开始, 控制器ID可以指定为通配符, eg. module/*.

public array $controllers null
$denyCallback public 属性

如果此规则确定应拒绝对当前动作的访问, 则将调用该回调. 当此规则匹配并且 $allow 设置为false时就是这种情况.

如果未设置, 则该行为将由 yii\filters\AccessControl 确定; 使用 yii\filters\AccessControl::denyAccess()yii\filters\AccessControl::$denyCallback(如果已配置).

回调的签名应如下所示:

function ($rule, $action)

其中$rule是此规则, $action是当前的 动作 对象.

参见 yii\filters\AccessControl::$denyCallback.

public callable $denyCallback null
$ips public 属性

此规则适用的用户 IP 地址列表.

IP 地址的末尾可以包含通配符*, 以便与具有相同前缀的 IP 地址匹配. 例如, 192.168.*匹配192.168.段中的所有 IP 地址. 它还可能包含一个模式/掩码, 例如172.16.0.0/12, 它将与 RFC1918 中20位专用网络模块中的所有IP匹配. 如果未设置或为空, 则表示此规则适用于所有 IP 地址.

参见:

public array $ips null
$matchCallback public 属性

一个回调, 将被调用以确定是否应应用此规则.

回调的签名应如下所示:

function ($rule, $action)

其中$rule是此规则, $action是当前的 动作 对象.

回调应返回一个布尔值, 指示是否应应用此规则.

public callable $matchCallback null
$permissions public 属性 (可用自版本: 2.0.12)

此规则适用的 RBAC(基于角色的访问控制)权限列表. 将调用 yii\web\User::can() 来检查访问.

如果此属性未设置或为空, 则表示此规则适用于任何权限.

参见:

public array $permissions null
$roleParams public 属性 (可用自版本: 2.0.12)

传递给 yii\web\User::can() 函数的参数, 用于检查 $roles 中的用户权限.

如果这是一个数组, 它将直接传递给 yii\web\User::can(). 例如, 为了传递当前请求ID, 你可以使用以下代码:

['postId' => Yii::$app->request->get('id')]

你也可以指定一个返回数组的闭包(closure). 仅在需要数组值是(eg. 需要加载模型时, 如以下代码所示), 才可以将其用于检查数组值:

'rules' => [
    [
        'allow' => true,
        'actions' => ['update'],
        'roles' => ['updatePost'],
        'roleParams' => function($rule) {
            return ['post' => Post::findOne(Yii::$app->request->get('id'))];
        },
    ],
],

yii\filters\AccessRule 实例的引用将作为第一个参数传递给闭包.

参见 $roles.

$roles public 属性

此规则适用的角色列表(要求正确配置的用户(User)组件).

识别两个特殊角色, 并通过 yii\web\User::$isGuest 进行检查:

  • ?: 匹配访客用户(尚未验证)
  • @: 匹配经过身份验证的用户

如果你使用的是 RBAC(基于角色的访问控制), 则还可以指定角色名称. 在这种情况下, 将调用 yii\web\User::can() 来检查访问.

Note: 最好改为检查权限.

如果此属性未设置或为空, 则表示此规则适用于任何角色.

参见:

public array $roles null
$verbs public 属性

此规则适用的请求方法列表(eg: GET, POST).

如果未设置或为空, 则表示此规则适用于所有请求方法.

参见 yii\web\Request::$method.

public array $verbs null

方法详情

allows() public 方法

检查是否允许 Web 用户执行指定的动作.

public boolean|null allows ( $action, $user, $request )
$action yii\base\Action

要执行的动作.

$user yii\web\User|false

用户对象, 如果用户组件分离则为false.

$request yii\web\Request
return boolean|null

如果允许用户, 则为true; 如果拒绝用户, 则为false; 如果规则不适用于该用户, 则为null.

matchAction() protected 方法

判断该规则是否适用于该动作.

protected boolean matchAction ( $action )
$action yii\base\Action

动作(action).

return boolean

该规则是否适用于该动作.

matchController() protected 方法

判断该规则是否适用于该控制器.

protected boolean matchController ( $controller )
$controller yii\base\Controller

控制器(controller).

return boolean

该规则是否适用于该控制器.

matchCustom() protected 方法

判断是否应该适用该规则.

protected boolean matchCustom ( $action )
$action yii\base\Action

要执行的动作.

return boolean

是否应该适用该规则.

matchIP() protected 方法

判断该规则是否适用于该 IP 地址.

protected boolean matchIP ( $ip )
$ip string|null

IP 地址.

return boolean

该规则是否适用于该 IP 地址.

matchRole() protected 方法

判断该规则是否适用于该角色.

protected boolean matchRole ( $user )
$user yii\web\User

用户(user)对象.

return boolean

该规则是否适用于该角色.

throws yii\base\InvalidConfigException

如果用户(User)组件已分离

matchVerb() protected 方法

判断规则是否适用于该请求.

protected boolean matchVerb ( $verb )
$verb string

请求方法.

return boolean

该规则是否适用于该请求.