在我们之前yii2搭建后台以及rbac详细教程中,不知道你曾经疑惑过没有一个问题,rule表是做什么的,为什么在整个过程中我们都没有涉及到这张表?

相信我不说,部分人也都会去尝试,或百度或google,到头来也会竹篮打水,这部分讲解的内容少之又少啊!

对于一般的权限系统而言,我们之前做的rbac一般情况下是足够的,即时没有rule,相信你也能实现我们用rule实现的功能。

我们就以官网的例子给出一个具体的操作教程,看看这个神秘的rule到底是做什么的!

看需求:

我们有管理员和普通用户,对于文章系统而言,我们允许管理员对文章的任何操作,但是只允许普通用户创建文章和修改自己创建的文章,注意哦,是允许其修改自己创建的文章,不是不允许修改文章,也不是修改所有的文章!

看yii2 rbac rule怎么去实现,重点是教大家怎么去使用这个rule,也解开众多人心中的节!

在我们添加rule之前,需要先实现 yii\rbac\Rule类的execute方法。

<?php
namespace backend\components;use Yii;
use yii\rbac\Rule;class ArticleRule extends Rule
{public $name = 'article';public function execute($user, $item, $params){// 这里先设置为false,逻辑上后面再完善return false;}
}

接着,我们才可以去后台rule列表(/admin/rule/index)添加rule。具体添加方式可参考下方截图

注意,上面这一步很多人会死在类名的添加上,记得加上我们ArticleRule文件所在的命名空间!

我们看第三步,该步骤也是很容易出错的地方!该篇教程请注意集中精力,前方高能!

我们访问权限列表(/admin/permission/index)新增权限,该权限只针对文章的修改,随后我们将其分配给用户所属角色

需要注意了,此处严重警告,这里新增加的权限所控制的路由也就是文章的更新操作(/article/update)分配给当前用户仅且一次,重复分配当前操作给所属角色或用户,可能造成rule失效,失效原因则是覆盖!

此刻再次刷新文章的更新页面(/article/update/1),很显然直接给我们了403 forbidden没权限访问的提示,也就是我们刚刚添加的rule生效了!如果此刻没生效,请检查上面所说的两个注意点!

然后我们实现ArticleRule::execute方法内业务逻辑,可参考如下:

class ArticleRule extends Rule
{public $name = 'article';/*** @param string|integer $user 当前登录用户的uid* @param Item $item 所属规则rule,也就是我们后面要进行的新增规则* @param array $params 当前请求携带的参数. * @return true或false.true用户可访问 false用户不可访问*/public function execute($user, $item, $params){$id = isset($params['id']) ? $params['id'] : null;if (!$id) {return false;}$model = Article::findOne($id);if (!$model) {return false;}$username = Yii::$app->user->identity->username;$role = Yii::$app->user->identity->role;if ($role == User::ROLE_ADMIN || $username == $model->operate) {return true;}return false;}
}

最后就是验证了,到底我们所实现的rule认证起作用了没呢?

测试步骤如下可做参考:

  1. 当前用户创建一篇文章,记得记录当前文章的创建者,其角色是管理员,我们默认User::ROLE_ADMIN
  2. 创建一个普通用户,且也创建一篇文章,同时也需要记录当前文章的创建者
  3. 分别用管理员帐号和普通用户登录系统修改这两篇文章,结论自然是满足我们一开始所提的需求,管理员两篇文章均可修改,普通用户只能修改自己的文章

yii2权限控制rbac之rule详细讲解(转)相关推荐

  1. yii2 rbac权限控制之菜单menu详细教程

    为什么80%的码农都做不了架构师?>>>    作者:白狼 出处:http://www.manks.top/yii2_rbac_menu.html本文版权归作者,欢迎转载,但未经作者 ...

  2. yii2 高级版本的权限控制RBAC(认证与授权的使用)修改篇

    common/main.php的components下 'authManager' => ['class' => 'yii\rbac\DbManager','itemTable' => ...

  3. 部门角色权限rbac_k8s十 | 一文读懂基于角色的权限控制RBAC

    一.ServiceAccount . 1. ServiceAccount 介绍 首先Kubernetes中账户区分为:User Accounts(用户账户) 和 Service Accounts(服务 ...

  4. java 接口权限控制_手把手教你搞定权限管理,结合Spring Security实现接口的动态权限控制!...

    SpringBoot实战电商项目mall(30k+star)地址:github.com/macrozheng/- 摘要 权限控管理作为后台管理系统中必要的功能,mall项目中结合Spring Secu ...

  5. Yii2搭建后台并实现rbac权限控制完整实例教程

    分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 photoshop教程 ...

  6. yii2搭建完美后台并实现rbac权限控制实例教程

    作者:白狼 出处:http://www.manks.top/yii2_fra... 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权 ...

  7. 基于角色的权限控制模型RBAC

    本文来说下基于角色的权限控制模型RBAC 文章目录 概述 RBAC权限模型简介 RBAC的演化进程 用户与权限直接关联 一个用户拥有一个角色 一个用户一个或多个角色 页面访问权限与操作权限 数据权限 ...

  8. Spring Security 实战干货: RBAC权限控制概念的理解

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 码农小胖哥 来源 | 公众号「码农小胖哥」 1 ...

  9. RBAC、控制权限设计、权限表设计 基于角色权限控制和基于资源权限控制的区别优劣

    RBAC.控制权限设计.权限表设计 基于角色权限控制和基于资源权限控制的区别优劣 一.介绍 二.基于角色的权限设计 三.基于资源的权限设计 四.主体.资源.权限关系图 主体.资源.权限相关的数据模型 ...

最新文章

  1. c++判断双击间隔_录井工常见故障判断处理
  2. 说说重试的那些实现方式
  3. JS 设计模式 四(单例)
  4. bat修改文件内容_在win10系统中一键修改MapGIS67系统库背景色
  5. 第六章 深度学习(中下)
  6. zip,tar,打包并压缩
  7. C\C++对文件的读写操作
  8. 科研助力 | 牛津,MIT导师计算机科研项目招生(仅限AI,机器学习,深度学习方向)...
  9. Java 网络通信必备之socket通信基本原理介绍
  10. IOS静态库生成及测试
  11. MlLib--逻辑回归笔记
  12. 『MCSE 2008系统管理视频』Unit 5 域用户与组的管理 第2讲 mcse 2008
  13. 简洁高效的原型图设计工具Mockplus
  14. java 旋转方向_Java 旋转PDF页面方向
  15. Flash XSS 漏洞实例
  16. 圣安地列斯服务器没有响应,Windows10系统玩不了侠盗猎车圣安地列斯怎么办?解决方案...
  17. 中国原盐产业发展现状分析,原盐主要应用于化工行业「图」
  18. SVN Tortoise小乌龟在repo-browser上右键删除了文件目录 回滚解决办法
  19. 微软账号登陆不上_企业信息化面临的问题,看看解决方案,基于微软平台的IT架构...
  20. 菜鸡的折腾路程,情人节啊顺便记录一下啦,立个flag

热门文章

  1. SpreadJS 类Excel表格控件 - V12 新特性详解
  2. HEOI2018游记
  3. 迁移不是云计算面临的唯一障碍
  4. springboot 使用 redis 管理session
  5. 【一天一个shell命令】文本操作系列-touch
  6. 自建ELK vs 日志服务(SLS)全方位对比
  7. Python的GIL是什么鬼,多线程性能究竟如何
  8. Windows 2000、XP、XP+进程名描述
  9. CentOS 7.3 安装配置RabbitMQ
  10. 零基础到精通Linux,从这篇文章开始