文档章节

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

阿北2017
 阿北2017
发布于 2017/08/05 22:36
字数 1638
阅读 25
收藏 1

先说一个小消息,关于yii2-admin,北哥本月11日在sf讲座频道开讲,感兴趣的可以报下,学习更直接 https://segmentfault.com/l/1500000010021036

开篇

首先要说的是yii2的rbac扩展并不多,yii2-admin算最好的了,网上关于它的介绍也少之又少,好吧,今天北哥就吐它几口老血,整一篇,请各兄弟仔细读读。

适合读者 对yii2的rbac有一点了解,起码知道几张数据表吧。

先说目录

  • yii2-admin是个啥
  • 安装和关键点配置
  • yii2-admin布局的使用
  • yii2-admin为何多了一层route,是咋回事?
  • 用yii2-admin配置带角色的会员系统
  • 用yii2-admin配置聪明的菜单

yii2-admin是个啥

先报官方地址:https://github.com/mdmsoft/yii2-admin

从用途上将,它是一个yii2 rbac权限系统,我们不用自己写代码,按照yii2-admin的要求,安装下然后点一点,一个完善的权限系统就出来了,yii\rbac这个命名空间下的各种类构成了yii2-admin强劲的血脉,bootstrap给了它一套简洁华丽的外表,表里如一。

从性质上说,它是一个composer的扩展,所以你安装它并不复杂,它居住在应用程序的vendor小区,门牌号为 mdmsoft/yii2-admin,别找错门。

从结构上说,yii2-admin是一个yii2的模块,拥有完善的MVC,有资源,有migration,有组件,啥都有。

最后总结一下 yii2-admin 是一个yii2的模块,实现可视化rbac管理功能,依托于composer进行安装和升级,ok,亮相完毕,贴几个图,露露脸。

源码位置

一张截图

安装和关键点配置

yii2-admin使用composer可以一键安装,当然就算没有你也可以进行归档文件手工安装。

composer安装

稳定第一,虽然yii2-admin现在有v3版本,但是作者不再维护此分支,我推荐大家使用v2版本,这个分支的更新速度还是很稳定的。

composer require mdmsoft/yii2-admin "~2.0"

此刻composer为我安装了最新的2.7版本

alt

归档文件安装

第一步 在这里下载版本(最新的为v2.7) https://github.com/mdmsoft/yii2-admin/releases

第二步 设置一个别名

// config/web.php里
'aliases' => [
	'@mdm/admin' => 'path/to/your/extracted',
	// for example: '@mdm/admin' => '@app/extensions/mdm/yii2-admin-2.0.0',
	...
]

提醒 aliases的位置和components同级,不要放错位置。

到此刻位置,无论何种方式,我相信yii2-admin已经进入到你的系统了。

配置

接下来进入本文的第一次配置,前面我们说了,yii2-admin = rbac + module + composer,所以你一定懂得下面我做的事情。

// config/web.php
// 配置模块
'modules' => [
	'admin' => [
		'class' => 'mdm\admin\Module',
		...
	]
	...
],
// 配置权限
'components' => [
	...
	'authManager' => [
		'class' => 'yii\rbac\DbManager', // or use 'yii\rbac\PhpManager'
	]
],
'as access' => [
	'class' => 'mdm\admin\components\AccessControl',
	'allowActions' => [
		'site/*',
		'admin/*',
	]
],

这是最基本的配置,它能让yii2-admin运行起来,modules 和 authManager 你应该懂(不懂的看下 c14 这个专题视频,讲解rbac细节东东),这里说明下 as access 的功能。

as access是个啥? 大家可以看下 mdm\admin\components\AccessControl 类,我贴一部分出来说


namespace mdm\admin\components;

use ...

/**
 * Access Control Filter (ACF) is a simple authorization method that is best used by applications that only need some simple access control. 
 * As its name indicates, ACF is an action filter that can be attached to a controller or a module as a behavior. 
 * ACF will check a set of access rules to make sure the current user can access the requested action.
 *
 * To use AccessControl, declare it in the application config as behavior.
 * For example.
 *
 * ```
 * 'as access' => [
 *     'class' => 'mdm\admin\components\AccessControl',
 *     'allowActions' => ['site/login', 'site/error']
 * ]
 * ```
 */
class AccessControl extends \yii\base\ActionFilter {
	...
}

重点在于注释部分,它是acf,而一般来说acf的控制规则都会在控制器或模型的behavior方法里设置,当然我们也可以在配置文件中用 as access 的形式整个app进行规则限制。

重点在于下面这句

'allowActions' => [
	'site/*',
	'admin/*',
]

allowActions ,什么意思那?site控制器下的所有action以及admin模块可以跳过yii2-admin的权限控制,你可以在里面添加其他的路由。

总之在此刻你要做的是记住它即可,后面我们会对acf等有说明。

好了,现在看看访问的情况,yii2-admin给出了一些它的url,如下

http://localhost/index.php?r=admin
http://localhost/index.php?r=admin/route
http://localhost/index.php?r=admin/permission
http://localhost/index.php?r=admin/menu
http://localhost/index.php?r=admin/role
http://localhost/index.php?r=admin/assignment
http://localhost/index.php?r=admin/user

访问 /index.php?r=admin ,你会成功看到yii2-admin运行的默认页面,第一步大功告成。

alt

yii2-admin布局的使用

默认情况下,yii2-admin使用应用程序的布局,当然它自己也带有4个布局,分别是 left-menu、main、right-menu、top-menu这样子。

我们可以在web.php的模块布局配置中指定他们,比如我现在要使用left-menu的。

'modules' => [
	'admin' => [
		'class' => 'mdm\admin\Module',
		'layout' => 'left-menu'
	],
],

看看运行图

alt

基本上就是多了一个菜单这么个玩意,其他的比如top-menu、right-menu就是菜单位置不同而已,各位兄弟可以自己尝试下。

再说一点,既然yii2-admin是一个模块,那其实我们很容易就能找到这些布局所在,看图。

alt

看明白了吧,记住yii2-admin是什么!yii2-admin = rbac + module + composer,遇到不懂的地方往这三个上面靠,会比较容易理解。

这就是布局,比较简单,这部分过。

为何多了一层route - 1

如果你对yii2的rbac,或者说你对任何一个框架的rbac有了解,都应该知道在rbac中有如下名词

  • 角色
  • 权限
  • 关系
  • 资源
  • 规则

而看我们的yii2-admin,你如果操作下会发现,它多了一个route,route属于某个权限或角色,这是咋回事?route是个毛?

alt

现在我帮你顺一顺,我们说rbac中最终操作的是资源,而一个资源在yii中其实就是一个action,比如你能编辑商品其实是你有没有访问goods/edit的权限,而这些不就是路由么,路由最终定位到action,定位到资源。

这就是为何yii2-admin要引入路由的概念,其实它是在定义资源,毕竟作为一个通用性的权限管理,总不能让我们自己去action里做代码吧。

那么问题又来了? 我们yii2的rbac只有四张表,并没有路由表,那么yii2-admin是如何玩转这个东东的那?

奥秘下节为你揭晓,从源码的角度告诉你route的逻辑实现。

© 著作权归作者所有

阿北2017
粉丝 68
博文 58
码字总数 74348
作品 0
洛阳
私信 提问
yii2搭建完美后台并实现rbac权限控制

作者:白狼 出处:http://www.manks.top/article/yii2framerbac_template 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律...

白狼栈
2016/03/30
833
2
安装指南: 带有 RBAC 的 Yii2 高级模板

在这里我介绍一种快速简单的方法来在 Yii2 高级模版中安装 RBAC(Role Based Access Control) 系统 安装: Yii2 高级模板 在这里使用 安装 yii2 高级模板。假如你的机器中没有 请下载 它的最新...

首席烤地瓜
2016/11/10
158
0
yii2开发中19条推荐实践(阿北总结)

虽然每个人的编程风格不同,但是有些建议能让你的代码更加规范和稳定,本次就我这次网站更新总结如下几点,希望对你的yii2学习和使用有所帮助。 环境说明 服务器环境: CentOS 开发环境及IDE...

阿北2017
2018/06/02
147
3
基于 yii2 的内容管理系统--FeehiCMS

FeehiCMS是基于yii2的CMS系统,运行环境与yii2(php>=5.4)一致。FeehiCMS旨在为yii2爱好者提供一个基础功能完善的CMS系统,使开发者更专注于业务功能开发。 FeehiCMS没有对yii2做任何的修改、...

liufee
2017/11/22
5.9K
4
linux下安装yii——遇到到问题和解决

由于PHP的很多高阶教材都是以LINUX作为基础,我也只好硬着头皮从WINDOWS转向LINUX,说实在的,这是个很痛苦到过程,从一个傻瓜 式到桌面系统转到一个繁琐到命令式系统,就像从移动电话时代回...

南国野兽
2012/11/24
4.9K
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.4K
15
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
41
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部