未加星标

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

字体大小 | |
[开发(php) 所属分类 开发(php) | 发布者 店小二04 | 时间 2017 | 作者 红领巾 ] 0人收藏点击收藏

本篇继续讲解 yii2-admin 扩展

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

本章要讲的内容如下

yii2-admin为何多了一层route,是咋回事? 用yii2-admin配置带角色的会员系统 继续说route及Permissions

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

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


北哥这篇文讲解yii2权限扩展(yii2-admin) - 中部
alt 自动检索

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

在你自己添加路由的时候,务必且必须以 / 开始,否则它会带来很多麻烦问题。

对于自动检索处的路由,我们可以通过 ② 操作将其添加到 ③ 区域。对于自动添加的路由它会自己进入到 ③ 区域。

就想我下面动图展示的一样


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

当然,如果是自己添加的,你在自动检索区①处是看不到的。

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

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


北哥这篇文讲解yii2权限扩展(yii2-admin) - 中部
是的,这货就是权限

是的,这货就是权限,但如果它是权限,那yii2-admin的权限又是干嘛的?别急,我们熟悉下yii2-admin,顺完会为大家揭晓。此坑必填。

Permissions

我们来看Permissions菜单。现在我们来生成一个Permission。


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

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

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


北哥这篇文讲解yii2权限扩展(yii2-admin) - 中部
为权限指派路由

上图的目的是什么?我们知道,路由就是资源,我们现在在为一个权限指派资源,当然你理解为权限可以属于另一个权限也没有问题。

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

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


北哥这篇文讲解yii2权限扩展(yii2-admin) - 中部
item表变化
北哥这篇文讲解yii2权限扩展(yii2-admin) - 中部
关系已经建立

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

填一个坑

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


北哥这篇文讲解yii2权限扩展(yii2-admin) - 中部
这是为什么那?

其实很简单,这要看下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) - 中部
角色的建立和赋予权限 为会员分配角色

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

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

配置user

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

// 导入数据表 命令行运行 ./yii migrate [email protected]/admin/migrations
北哥这篇文讲解yii2权限扩展(yii2-admin) - 中部
两张表

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

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

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


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

接下来我们需要设置下web.php

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

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

index.php?r=admin/user/signup


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

赶紧去建立几个会员吧

分配角色

现在有了会员,选择Assignments菜单中的某个会员,我们就可以轻松的为他分配角色和权限了


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

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


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

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

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


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

本文开发(php)相关术语:php代码审计工具 php开发工程师 移动开发者大会 移动互联网开发 web开发工程师 软件开发流程 软件开发工程师

主题: 数据其实数据库
分页:12
转载请注明
本文标题:北哥这篇文讲解yii2权限扩展(yii2-admin) - 中部
本站链接:http://www.codesec.net/view/561288.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 开发(php) | 评论(0) | 阅读(12)