authorization权限控制_授权(Authorization)

授权

授权是指验证用户是否允许做某件事的过程。Yii提供两种授权方法: 存取控制过滤器(ACF)和基于角色的存取控制(RBAC)。

存取控制过滤器

存取控制过滤器(ACF)是一种通过 yii\filters\AccessControl 类来实现的简单授权方法, 非常适用于仅需要简单的存取控制的应用。正如其名称所指,ACF 是一个种行动(action)过滤器 filter,可在控制器或者模块中使用。当一个用户请求一个 action 时, ACF会检查 yii\filters\AccessControl::rules 列表,判断该用户是否允许执 行所请求的action。(译者注: action 在本文中视情况翻译为行动、操作、方法等)

下述代码展示如何在 site 控制器中使用 ACF:

use yii\web\Controller;

use yii\filters\AccessControl;

class SiteController extends Controller

{

public function behaviors()

{

return [

'access' => [

'class' => AccessControl::className(),

'only' => ['login', 'logout', 'signup'],

'rules' => [

[

'allow' => true,

'actions' => ['login', 'signup'],

'roles' => ['?'],

],

[

'allow' => true,

'actions' => ['logout'],

'roles' => ['@'],

],

],

],

];

}

// ...

}

上面的代码中 ACF 以行为 (behavior) 的形式附加到 site 控制器。 这就是很典型的使用行动过滤器的方法。 only 选项指明 ACF 应当只 对 login, logout 和 signup 方法起作用。所有其它的 site 控制器中的方法不受存取控制的限制。 rules 选项列出了 yii\filters\AccessRule,解读如下:

允许所有访客(还未经认证的用户)执行 login 和 signup 操作。 roles 选项包含的问号 ? 是一个特殊的标识,代表”访客用户”。

允许已认证用户执行 logout 操作。@是另一个特殊标识, 代表”已认证用户”。

ACF 自顶向下逐一检查存取规则,直到找到一个与当前 欲执行的操作相符的规则。 然后该匹配规则中的 allow 选项的值用于判定该用户是否获得授权。如果没有找到匹配的规则, 意味着该用户没有获得授权。(译者注: only 中没有列出的操作,将无条件获得授权)

当 ACF 判定一个用户没有获得执行当前操作的授权时,它的默认处理是:

如果该用户是访客,将调用 yii\web\User::loginRequired() 将用户的浏览器重定向到登录页面。

如果该用户是已认证用户,将抛出一个 yii\web\ForbiddenHttpException 异常。

你可以通过配置 yii\filters\AccessControl::denyCallback 属性定制该行为:

[

'class' => AccessControl::className(),

...

'denyCallback' => function ($rule, $action) {

throw new \Exception('You are not allowed to access this page');

}

]

yii\filters\AccessRule 支持很多的选项。下列是所支持选项的总览。 你可以派生 yii\filters\AccessRule 来创建自定义的存取规则类。

yii\filters\AccessRule::allow: 指定该规则是 "允许" 还是 "拒绝" 。(译者注:true是允许,false是拒绝)

yii\filters\AccessRule::actions:指定该规则用于匹配哪些操作。 它的值应该是操作方法的ID数组。匹配比较是大小写敏感的。如果该选项为空,或者不使用该选项, 意味着当前规则适用于所有的操作。

yii\filters\AccessRule::controllers:指定该规则用于匹配哪些控制器。 它的值应为控制器ID数组。匹配比较是大小写敏感的。如果该选项为空,或者不使用该选项, 则意味着当前规则适用于所有的操作。(译者注:这个选项一般是在控制器的自定义父类中使用才有意义)

yii\filters\AccessRule::roles:指定该规则用于匹配哪些用户角色。 系统自带两个特殊的角色,通过 yii\web\User::isGuest 来判断:

?: 用于匹配访客用户 (未经认证)

@: 用于匹配已认证用户

使用其他角色名时,将触发调用 yii\web\User::can(),这时要求 RBAC 的支持 (在下一节中阐述)。 如果该选项为空或者不使用该选项,意味着该规则适用于所有角色。

yii\filt

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值