yii2项目实战-基于角色的访问控制(rbac)分配案例
上面两个章节,我们主要介绍了什么是RBAC。今天我们准备用手去描述下这个操作,想想还是有点激动的。
我们知道,在一般的管理平台上都需要给用户分配权限,除非是要求非常简陋的需求,正好你也不会,所以就糊弄过去了。
为了讲解的更真实,今天我们就把博客相关的一系列操作权限(增删改查等)分配给用户。终于可以敲代码了,憋屈了两节的枯燥一扫而去。
1、首先,我们创建一张blog表,用于后面的操作。
DROP TABLE IF EXISTS `blog`; CREATE TABLE `blog` ( `id` int(11) NOT NULL, `title` varchar(100) NOT NULL DEFAULT '' COMMENT '标题', `content` text NOT NULL COMMENT '内容', `views` int(11) NOT NULL DEFAULT '0' COMMENT '点击量', `is_delete` tinyint(4) NOT NULL DEFAULT '1' COMMENT '是否删除 1未删除 2已删除', `created_at` datetime NOT NULL COMMENT '添加时间', `updated_at` datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2、gii生成模板,不会的请参考这篇文章
现在我们通过 /index.php?r=blog 可以看到博客的一系列操作。此时,博客相关的一系列操作,是游离在 RBAC 和 ACF 之外的,也就是任何人都可以访问的。
接下来就要上演重点的关键时刻了。我们要想办法通过rbac将其相关的一系列操作分配给用户,只有分配了权限的用户才可以访问!
那有同学要说了,既然这样,我可以直接把路由跟用户进行绑定吗,用户访问的时候我直接查一下二者的关联,有就让访问,没有就不让访问。
可以呀,但是这样就跟我们的RBAC毫无关系啦。当然,重点是,假设每个人有100甚至更多的操作,你是不是每个人都一个一个的去绑定呢?再者,假设我们新开发了一个功能,要求这后台的80%的人员都有权限访问,你怎么操作呢?每个人再分配一次?那你这天天加班到很晚可就不怪我咯!
再说明白点,我们今天就是要利用 auth_assignment、auth_item 和 auth_item_child 表来实现rbac的授权!其实还有一张 auth_rule 表,我们暂时先不考虑。
那我们就来实现吧。但是但是,这其实大部分的授权接口,官方其实都已经为我们实现好了!我们只需要去操作官方实现好的接口即可。
为了练习,我们手动创建一个控制器 RbacController 来做这些操作。
<?php namespace backend\controllers; use Yii; use yii\web\Controller; class RbacController extends Controller { public function actionInit () { // 这个是我们上节课添加的a
还有60%的精彩内容,购买继续阅读
- 评论区