Yii2 rbac权限控制之rule教程详解


Posted in PHP onJune 23, 2016

在我们之前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。具体添加方式可参考下方截图

Yii2 rbac权限控制之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教程详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
php多文件上传实现代码
Feb 20 PHP
php CI框架插入一条或多条sql记录示例
Jul 29 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
Jan 22 PHP
php二维数组合并及去重复的方法
Mar 04 PHP
PHP获取ip对应地区和使用网络类型的方法
Mar 11 PHP
PHP会话处理的10个函数
Aug 11 PHP
用php代码限制国内IP访问我们网站
Sep 26 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
Mar 01 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
Aug 28 PHP
PHP用PDO如何封装简单易用的DB类详解
Jul 30 PHP
php post json参数的传递和接收处理方法
May 31 PHP
php中array_fill函数的实例用法
Mar 02 PHP
[原创]php使用curl判断网页404(不存在)的方法
Jun 23 #PHP
PHP生成静态HTML文档实现代码
Jun 23 #PHP
PHP微信支付开发实例
Jun 22 #PHP
[原创]解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载)
Jun 22 #PHP
PHP树-不需要递归的实现方法
Jun 21 #PHP
PHP MySql增删改查的简单实例
Jun 21 #PHP
浅谈PHP eval()函数定义和用法
Jun 21 #PHP
You might like
php中文件上传的安全问题
2006/10/09 PHP
小文件php+SQLite存储方案
2010/09/04 PHP
php 字符串压缩方法比较示例
2014/01/23 PHP
php二维数组转成字符串示例
2014/02/17 PHP
javascript flash下fromCharCode和charCodeAt方法使用说明
2008/01/12 Javascript
jQuery.lazyload+masonry改良图片瀑布流代码
2014/06/20 Javascript
javascript初学者常用技巧
2014/09/02 Javascript
js+css实现的圆角边框TAB选项卡滑动门代码分享(2款)
2015/08/26 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
2015/10/09 Javascript
基于JavaScript实现文字超出部分隐藏
2016/02/29 Javascript
AngularJS 过滤与排序详解及实例代码
2016/09/14 Javascript
JS遍历ul下的li点击弹出li的索引的实现方法
2016/09/19 Javascript
Html5 js实现手风琴效果
2020/04/17 Javascript
详解require.js配置路径的用法和css的引入
2017/09/06 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
2017/10/09 jQuery
在vue使用clipboard.js进行一键复制文本的实现示例
2019/01/15 Javascript
Vue实现可移动水平时间轴
2020/06/29 Javascript
解决Vue中的生命周期beforeDestory不触发的问题
2020/07/21 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
2020/08/03 Javascript
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
Python实现HTTP协议下的文件下载方法总结
2016/04/20 Python
Python中的默认参数实例分析
2018/01/29 Python
Python并发:多线程与多进程的详解
2019/01/24 Python
python读文件的步骤
2019/10/08 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
CSS3 创建网页动画实现弹跳球动效果
2018/10/30 HTML / CSS
美国非常受欢迎的Spa品牌:Bliss必列斯
2018/04/10 全球购物
全球采购的街头服饰和帽子:Urban Excess
2020/10/28 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
2016/08/18 面试题
自荐信格式技巧有哪些呢
2013/11/19 职场文书
优秀中学生事迹材料
2014/01/31 职场文书
乡村卫生服务一体化管理实施方案
2014/03/30 职场文书
上班迟到检讨书300字
2014/10/18 职场文书
辞职信格式模板
2015/02/27 职场文书
简短的36句中秋节祝福信息语句
2019/09/09 职场文书
SQL之各种join小结详细讲解
2021/08/04 MySQL