Yii2权限管理之ACF

来源:互联网 发布:贴吧发帖软件 编辑:程序博客网 时间:2024/06/04 19:40

概述

在Yii中, 共支持两种权限管理, 其一ACF, 其二RBAC. 在做用户平台前台应用时, AFC是比较常用, 易用的控制用户哪些页面可以直接访问, 哪些页面需要登录后访问的授权机制.

ACF, Access Control Filter,  是一个Yii中的过滤器. yii\filters\AccessControl类来实现.

使用

由于是过滤器, 因此需要在控制器类的方法behaviors()方法中定义.  以示例的SiteController为例:

以上配置中, 就配置了如下内容,

  • only选项表示该过滤器针对于logout, signup起作用
  • rules选项定义了动作的访问规则, 其中
    • actions表示当前规则针对于哪些动作起作用,
    • roles表示请求该动作的身份角色,  使用?问号表示未登录用户, @表示已登录用户
    • allow表示是否允许, true允许, false不允许.

总结来说, 就是在当前控制器中, 未登录用户可以访问signup动作进行注册, 而登录用户才可以访问logout动作, 执行退出工作.

对于我们来说, 主要是配置only中针对的动作, 以及将动作分配到允许和禁止的规则中. only选项表示该过滤器针对于哪些动作起作用, 如果没有在only列表中的动作, 表示默认授权, 可以访问的动作. 因此想要控制, 一定要加入到only列表中.

将上面的代码复制到任何的控制器中, 都可以立即起作用的, 很容易的呢!

此时, 经过AccessControl过滤器的判断, 如果当前没有授权执行某些操作, 则会重定向到登录页面. 如果没有授权的用户是已登录(认证)用户, 则会抛出Forbidden异常. 同时允许自定义没有授权的处理行为, 通过为denyCallback提供回调函数可以完成.

 

AccessControl选项列表

完整的AccessControl属性列表, 请参见.

  • 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\filters\AccessRule::ips:指定该规则用于匹配哪些 yii\web\Request::userIP 。 IP 地址可在其末尾包含通配符 * 以匹配一批前缀相同的IP地址。 例如,192.168.* 匹配所有 192.168. 段的IP地址。 如果该选项为空或者不使用该选项,意味着该规则适用于所有角色。
  • yii\filters\AccessRule::verbs:指定该规则用于匹配哪种请求方法(例如GETPOST)。 这里的匹配大小写不敏感。
  • yii\filters\AccessRule::matchCallback:指定一个PHP回调函数用于 判定该规则是否满足条件。(译者注:此处的回调函数是匿名函数)
  • yii\filters\AccessRule::denyCallback: 指定一个PHP回调函数, 当这个规则不满足条件时该函数会被调用。(译者注:此处的回调函数是匿名函数)

PS: 以上列表复制于Yii手册.

结语

ACF, 这种比较简单的访问授权控制, 适合用户系统角色不多的应用. 例如前台应用. 而后台应用, 通常会出现大量不同角色进行管理. 此时ACF就力不从心了, 没关系, 更强大的授权管理RBAC, 在Yii中也有很好的支持

原创粉丝点击