AccessControl其实也就是 yii\filters\AccessControl Filter, 我们下面简写为 ACF 作为描述。

ACF,访问控制过滤器,适用于简单的验证,面对的对象便是控制器的action。对于一些复杂的验证方式,我们后面会说到 Role Based Access Control (rbac),即基于角色的权限控制。

接下来我们就上面抛出的问题进行解析。

有同学要质疑了,创建新用户的操作,肯定要后台管理才可以进行操作,包括列表页等一系列操作,没登录肯定不能访问啊啊啊。

不急,下面我们就看看如何通过ACF去对 user-backend/* 的系列操作进行授权限制!

打开backend\controller\SiteController.php 我们看到这样一段代码

public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'actions' => ['login', 'error'],
'allow' => true,
],
[
'actions' => ['logout', 'index'],
'allow' => true,
'roles' => ['@'],
],
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post'],
],
],
];
}

我们发现AccessControl是以行为behaviors的方式附加在当前控制器。

不妨打开yii\filters\AccessControl.php文件,init方法中我们看到 配置项rules在使用之前,都会被创建为 yii\filters\AccessRule 的对象。

也就是说我们实际的配置应该是这样的

'rules' => [
[
'class' => 'yii\filters\AccessRule',
'actions' => ['login', 'error'],
'allow' => true,
],
],

通过配置一文,很容易就猜到 这里的actions和allow就是 AccessRule的属性了。

接着我们看到实际的请求过滤是在beforeAction中进行的!也就是说,在beforeAction中加了一层过滤的条件规则!

如此一来,整个过滤的流程你是不是感觉到清晰了好多,但是还没有完,我们还没有说具体的过滤规则,从init方法中,我们了解到具体的规则即是 yii\filters\AccessRule 类的属性了。也就是说,规则怎么写,就要看你怎么设定accessRule的属性了!属性怎么设置?打开 yii\filters\AccessRule文件,看每一个具体的注解!这里就不说了,因为注解已经写得非常详细了,说多了自然就累赘,不好不好。

那接下来我们就解决问题,UserBackendController/* 所有的操作应该都设置为登录之后才可以操作

'access' => [
'class' => AccessControl::className(),
'rules' => [
[
// 当前rule将会针对这里设置的actions起作用,如果actions不设置,默认就是当前控制器的所有操作
'actions' => ['index', 'view', 'create', 'update', 'delete', 'signup'],
// 设置actions的操作是允许访问还是拒绝访问
'allow' => true,
// @ 当前规则针对认证过的用户; ? 所有方可均可访问
'roles' => ['@'],
],
],
],

我们再做几个小练习

1、假设index操作只允许post请求才可以访问

'access' => [
'class' => AccessControl::className(),
'rules' => [
[
// 当前rule将会针对这里设置的actions起作用,如果actions不设置,默认就是当前控制器的所有操作
'actions' => ['view', 'create', 'update', 'delete', 'signup'],
// 设置actions的操作是允许访问还是拒绝访问
'allow' => true,
// @ 当前规则针对认证过的用户; ? 所有方可均可访问
'roles' => ['@'],
],
[
'actions' => ['index'],
'allow' => true,
// 设置只允许操作的action
'verbs' => ['POST'],
],
],
],

我们新增加的一条规则,设置了AccessRule::verbs属性即可。

注意哦,ACF 自上向下逐一检查规则,直到匹配到一个规则。也就是说如果你这里把verbs的actions index也添加一份到上面的那一条规则,verbs这条规则就相当于废掉了!

2、假设更新操作update只有用户test1可以访问,其他用户不可以访问

我们现在只有一个用户test1, 为了实现命题,在添加一个新用户test2

'access' => [
'class' => AccessControl::className(),
'rules' => [
[
// 当前rule将会针对这里设置的actions起作用,如果actions不设置,默认就是当前控制器的所有操作
'actions' => ['index', 'view', 'create', 'delete', 'signup'],
// 设置actions的操作是允许访问还是拒绝访问
'allow' => true,
// @ 当前规则针对认证过的用户; ? 所有用户均可访问
'roles' => ['@'],
],
[
'actions' => ['update'],
// 自定义一个规则,返回true表示满足该规则,可以访问,false表示不满足规则,也就不可以访问actions里面的操作啦
'matchCallback' => function ($rule, $action) {
return Yii::$app->user->id == 1 ? true : false;
},
'allow' => true,
],
],
],

Yii2框架ACF(AccessControl Filter)的使用的更多相关文章

  1. Yii2框架实现计数器功能

    思路: 因为yii2框架没有像tp框架那样的setinc这样的累加函数,所以只能在每次累加之前查出当前的这个字段的值,然后写算法累加入库 例如:

  2. 关于yii2框架活动记录activeRecord添加默认字段的问题

    平时使用sql的时候可以如下添加默认字段flag: "select a.*,0 as flag from user_info a", 对于yii2框架则需要这样: $query = ...

  3. Yii2框架RESTful API教程(二) - 格式化响应,授权认证和速率限制

    之前写过一篇Yii2框架RESTful API教程(一) - 快速入门,今天接着来探究一下Yii2 RESTful的格式化响应,授权认证和速率限制三个部分 一.目录结构 先列出需要改动的文件.目录如下 ...

  4. Yii2框架RESTful API教程(一) - 快速入门

    前不久做一个项目,是用Yii2框架写一套RESTful风格的API,就去查了下<Yii 2.0 权威指南 >,发现上面写得比较简略.所以就在这里写一篇教程贴,希望帮助刚接触Yii2框架RE ...

  5. [PHP]Yii2框架的坑

    [PHP]Yii2框架的坑.md-/Users/zjh/Documents/我的文章/[PHP]Yii2框架的坑 html{font-family: sans-serif;-ms-text-size- ...

  6. Yii2框架与MongoDB拓展、Redis拓展的安装流程

    @author 周煦辰 2016-03-21 这段时间新上了一个项目,使用的是Yii2框架.这里记录一下Yii2框架.Yii2-Mongo拓展.Yii2-Redis拓展等的安装流程.因为使用的系统是W ...

  7. yii2框架安装

    注意:先把php.ini里面的php_openssl.dll扩展打开 1.下载yii2框架的文件包yii-advanced-app-2.0.7 2.打开路径为advanced下面的init.bat   ...

  8. nginx完美支持yii2框架

    nginx完美支持yii2框架 server {listen 80;server_name www.peita.net peita.net;# default_server;access_log /d ...

  9. YII2框架动态创建表模型

    YII2框架动态创建表模型 在YII2中,每个表对应一个model类 在开发过程中,我们在填写一个大型表单的时候,表单里有N个select下拉列表,每个下拉select来自于不同的表: 如果要在程序里 ...

随机推荐

  1. vue初学者

    先分享一波福利 vue学习视频    链接:https://pan.baidu.com/s/1ggSfE75 密码:7h2a        1.先安装 webpack vue-cli          ...

  2. Redis 2种持久化模式的缺陷

    http://blog.csdn.net/hexieshangwang/article/details/47254087 一.RDB持久化模式缺陷 1.问题描述: 并发200路,模拟不断写Redis, ...

  3. Mysql的主从配置

    前言:这次学习分布式的思想要配置mysql的主从复制和读写分离,我在主从配置上踩到很多坑,在此演示一遍配置过程,并附上问题的说明和自己的一些见解 Mysql主从复制的原理 附上原理图: mysql的主 ...

  4. Protobuf 从入门到实战

    简介 从第一次接触Protobuf到实际使用已经有半年多,刚开始可能被它的名字所唬住,其实就它是一种轻便高效的数据格式,平台无关.语言无关.可扩展,可用于通讯协议和数据存储等领域. 优点 平台无关,语 ...

  5. ng机器学习视频笔记(十六) ——从图像处理谈机器学习项目流程

    ng机器学习视频笔记(十六) --从图像处理谈机器学习项目流程 (转载请附上本文链接--linhxx) 一.概述 这里简单讨论图像处理的机器学习过程,主要讨论的是机器学习的项目流程.采用的业务示例是O ...

  6. 图像映射<map>、<area>

    1.<map>定义图像映射,图像映射(image-map)指带有可单击区域的一幅图像. 2.<area>定义图像映射中的区域,area元素永远嵌套在map元素内部,area元素 ...

  7. 02-创建 TLS CA证书及密钥

    创建 TLS CA证书及密钥 kubernetes 系统的各组件需要使用 TLS 证书对通信进行加密,本文档使用 CloudFlare 的 PKI 工具集 cfssl 来生成 Certificate ...

  8. Notepad++ 运行java(转)

    Notepad++ 运行java java, 2013/05/04, 9 replies, 6,007 views 文章目录 Notepad++ for java 安装必须的程序 配置NppExec ...

  9. Array.prototype鲜为人知的事实

    // constructor 属性是每个具有原型的对象的原型成员. // 这包括除 Global 和 Math 对象之外的所有内部 JavaScript 对象. // constructor 属性包含 ...

  10. CS231n-lecture2-Image Classification pipeline 课堂笔记

    ---恢复内容开始--- 相关资源  Event Type  Date  Description  Course Materials Lecture 2 Thursday April 6 Image ...