限时 5折! 详情

yii2项目实战-基于角色的访问控制(rbac)分配案例

17706 0 0

上面两个章节,我们主要介绍了什么是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%的精彩内容,购买继续阅读