北哥这篇文讲解yii2权限扩展(yii2-admin) - 中部

本篇继续讲解 yii2-admin 扩展php

上一篇 nai8.me/article/yii… 咱们讲解了 yii2-admin的安装、布局和简单的配置,本节咱们重点讲解route的实现以及整个rbac操做流程。html

本章要讲的内容以下web

  • yii2-admin为什么多了一层route,是咋回事?
  • 用yii2-admin配置带角色的会员系统

继续说route及Permissions

上一节咱们说了yii2-admin多出route层,可是yii2的rbac数据表中并无相关的表,本节咱们讨论下route是如何处理的以及它和persission的关系。sql

而咱们使用yii2-admin也是从添加route开始的,打开 index.php?r=admin/route数据库

alt
alt

自动检索

首先看 ① 处,yii2-admin 会自动帮咱们把yii2程序的全部路由所有分析并列举出来供选择,固然你也能够在 ④ 处自行添加,可是有一点要注意yii2

在你本身添加路由的时候,务必且必须以 / 开始,不然它会带来不少麻烦问题。app

对于自动检索处的路由,咱们能够经过 ② 操做将其添加到 ③ 区域。对于自动添加的路由它会本身进入到 ③ 区域。yii

就想我下面动图展现的同样ide

操做流程
操做流程

固然,若是是本身添加的,你在自动检索区①处是看不到的。布局

当咱们从自动检索区添加一个到 ③ 区域,或自行添加后,rbac系统发生了什么那?

其实它填充了item表,以下图

是的,这货就是权限
是的,这货就是权限

是的,这货就是权限,但若是它是权限,那yii2-admin的权限又是干吗的?别急,咱们熟悉下yii2-admin,顺完会为你们揭晓。此坑必填。

Permissions

咱们来看Permissions菜单。如今咱们来生成一个Permission。

新增权限
新增权限

号外,因本章并非讲解yii2 rbac内容,北哥假设你对yii2 rbac已经有所了解,若是不了解能够看下 rbac系列视频

Route 和 Permissions 的关联就在于咱们新联了一个权限后,当新建一个权限后,yii2-admin须要让咱们为此权限指定对应的路由,不明白?看图,看图最直观。

为权限指派路由
为权限指派路由

上图的目的是什么?咱们知道,路由就是资源,咱们如今在为一个权限指派资源,固然你理解为权限能够属于另外一个权限也没有问题。

当咱们把路由 /goods/index 指派给 权限 goods-edit 后,未来拥有goods-edit权限的人就能访问 /goods/index 了。

接下来咱们看看为权限指路由后,rbac数据表的变化

item表变化
item表变化

关系已经创建
关系已经创建

是的,权限之间的所属关系已经创建。

填一个坑

接下来咱们来填上文的一个坑,当咱们为一个权限分配路由的时候,从数据表咱们知道他们都是权限,那么在每一个权限页面又如何分析出路由项而没有混入普通的权限那。这个状况在路由页面的 ③ 区域我想你也感受到了。

这是为何那?
这是为何那?

其实很简单,这要看下yii2-admin的一个方法

// /vendor/mdmsoft/yii2-admin/models/searchs/AuthItem.php 52行
public function search($params) {
    /* @var \yii\rbac\Manager $authManager */
    $authManager = Yii::$app->getAuthManager();
    if ($this->type == Item::TYPE_ROLE) {
        $items = $authManager->getRoles();
    } else {
        $items = array_filter($authManager->getPermissions(), function($item) {
            return $this->type == Item::TYPE_PERMISSION xor strncmp($item->name, '/', 1) === 0;
        });
    }
    $this->load($params);
    ....复制代码

对,就是其中的 strncmp($item->name, '/', 1) === 0 这句,这个方法搜索出了全部的权限列表,而后筛选出这些权限名字中第一个字符是 / 的,这也是为什么咱们说添加路由的时候必须 / 开头的缘由。

ok。

其余操做

关于如何创建角色等就不作详说,关于rule咱们会放到最有一篇说。

角色的创建和赋予权限
角色的创建和赋予权限

为会员分配角色

经过对上面的学习,咱们学会了如何新建权限和路由,如何创建角色并分配相关权限,万里长征走完了第一步,下面咱们来为yii2程序的会员分配角色和权限。

你必定发现了,yii2-admin并无一个user的菜单?不是没有,是没有配置而已。

配置user

咱们须要使用yii2-admin提供的会员模型,数据表已经为咱们准备好

// 导入数据表 命令行运行
./yii migrate --migrationPath=@mdm/admin/migrations复制代码

两张表
两张表

你也能够复制 /vendor/mdmsoft/yii2-admin/migrations 对应的数据库sql脚本导入。

这个行为会导入两张表,咱们先用其中的user表,menu会在下一节权限菜单中使用。

yii2-admin会自动检测数据库中是否有对应表而陈列出对应的菜单,如今你打开index.php?r=admin后,是否是多了user和menu菜单了。

菜单
菜单

接下来咱们须要设置下web.php

//在user模块里
 'user' => [
    'identityClass' => 'mdm\admin\models\User',
    'loginUrl' => ['admin/user/login'],
]复制代码

当你配置完之后会发现admin又多了一个叫作Assignments的菜单。不过此刻咱们的系统中是没有会员数据的,别担忧,yii2-admin提供了一个action让咱们生成会员。

index.php?r=admin/user/signup

注册会员
注册会员

赶忙去创建几个会员吧

分配角色

如今有了会员,选择Assignments菜单中的某个会员,咱们就能够轻松的为他分配角色和权限了

alt
alt

此刻我为会员abei分配了角色“客服人员”,它具备goods-edit(能够访问/goods/index路由) 可是不能访问 /goods/delete

效果演示
效果演示

这就是rbac的会员、角色、权限、资源的关系。

说了好多,你们也很累了,先这样,下一篇继续聊yii2-admin的user和menu两块。


签名档
签名档
相关文章
相关标签/搜索