yii2权限控制rbac之rule详细讲解(转)
在我们之前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认证起作用了没呢?
测试步骤如下可做参考:
- 当前用户创建一篇文章,记得记录当前文章的创建者,其角色是管理员,我们默认User::ROLE_ADMIN
- 创建一个普通用户,且也创建一篇文章,同时也需要记录当前文章的创建者
- 分别用管理员帐号和普通用户登录系统修改这两篇文章,结论自然是满足我们一开始所提的需求,管理员两篇文章均可修改,普通用户只能修改自己的文章
yii2权限控制rbac之rule详细讲解(转)的更多相关文章
- yii2权限控制rbac之rule详细讲解
作者:白狼 出处:http://www.manks.top/yii2_rbac_rule.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留 ...
- yii2权限控制rbac之详细操作步骤
本篇的主题是 rbac权限控制的详细操作步骤,注意是操作步骤哦,关于配置与rbac的搭建,我们在博文 yii2搭建完美后台并实现rbac权限控制实例教程说的再清楚不过了. 但是,在很多人的反馈下,说是 ...
- yii2权限控制rbac之菜单menu最详细教程
前面我们在博文 yii2搭建完美后台并实现rbac权限控制实例教程中完美实现了yii2的后台搭建和rbac权限控制,如果你还没有实现,请先看上文再回来参考本文,因为本文是在上文的基础上进行完善和补充. ...
- yii2 rbac权限控制之菜单menu详细教程
作者:白狼 出处:http://www.manks.top/article/yii2_rbac_menu本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...
- 权限控制-RBAC(Role-Based Access Control)
RBAC是基于角色的权限访问控制,在RBAC中角色与权限相连,用户通过成为某个角色而得到角色的权限,这就极大的简化了权限的管理,用户和角色多对多,角色和权限多对多,由此产生用户表.角色表.权限表,用户 ...
- yii2 rbac权限控制详细操作步骤
作者:白狼 出处:http://www.manks.top/article/yii2_rbac_description本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 ...
- yii2搭建完美后台并实现rbac权限控制实例教程
1.安装yii2 未安装的请参考yii2史上最简单式安装教程,没有之一 或者参考yii2实战教程之详细安装步骤 已安装的请继续看下一步操作 2.配置数据库 2.1 配置数据库 修改common/con ...
- 浅谈Yii-admin的权限控制
说到CMS,最需要有的东西就是权限控制,特别是一些复杂的场景,多用户,多角色,多部门,子父级查看等等.最近在开发一个线下销售的东东,这个系统分为管理员端,省代端,客户端,门店端,销售端, 部门端,部门 ...
- 认证鉴权与API权限控制在微服务架构中的设计与实现(四)
引言: 本文系<认证鉴权与API权限控制在微服务架构中的设计与实现>系列的完结篇,前面三篇已经将认证鉴权与API权限控制的流程和主要细节讲解完.本文比较长,对这个系列进行收尾,主要内容包括 ...
随机推荐
- window 系统设置无线wifi
netsh wlan set hostednetwork mode=allow ssid=huage key=243573295 如上表示设置成功 然后继续输入 netsh wlan start ho ...
- maven中snapshot快照库和release发布库的区别和作用
在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次.我们知道,maven的依赖管理是基于版本管理的, ...
- javac 编译与 JIT 编译
编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行: 其中绿色的模块可以选择性实现.很容易看出,上图中 ...
- 【CodeForces 261B】Maxim and Restaurant(DP,期望)
题目链接 第一种解法是$O(n^3*p)$的:f[i][j][k]表示前i个人进j个人长度为k有几种方案(排列固定为123..n时).$f[i][j][k]=f[i-1][j][k]+f[i-1][j ...
- Yii2美化confirm
在view中, <?= Html::a('删除', ['post/delete', 'id' => $post['id']],['data-confirm'=>'确定要删除吗?']) ...
- form 表单用php来跳转页面
action="submit.php" method="post" fomr 表单的提交跳转:method =post/get,get密码和用户的可见性,密码 ...
- 自定义多列排序:C++/Java实现
前言: 有些时候,我们在编程中会遇到多列排序的需求.假如在execle,这事儿就太easy了.不过没办法,现在就需要你用Java或者C++实现这样一个功能! 比如将下表无序的数据通过重排之后按照以下规 ...
- BZOJ 4245: [ONTAK2015]OR-XOR
4245: [ONTAK2015]OR-XOR Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 492 Solved: 269[Submit][Sta ...
- 先装.net后装iis的问题
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:(即就是先装的是visual stuido 2010的话,在安装IIS 7) 32位的Windows:----------- ...
- [NOIP2015] 提高组 洛谷P2680 运输计划
题目背景 公元 2044 年,人类进入了宇宙纪元. 题目描述 L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 n-1 条航道连通了 L 国的所有星球. 小 P 掌管一家 ...