1. 云栖社区>
  2. PHP教程>
  3. 正文

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

作者:用户 来源:互联网 时间:2017-11-30 14:01:00

权限扩展yii讲解adminyii2上部

北哥这篇文讲解yii2权限扩展(yii2-admin) - 上部 - 摘要: 本文讲的是北哥这篇文讲解yii2权限扩展(yii2-admin) - 上部, 先说一个小消息,关于yii2-admin,北哥本月11日在sf讲座频道开讲,感兴趣的可以报下,学习更直接 https://segmentfault.com/l/15... 开篇 首先要说的是yii2的rbac扩展并不多,yii2-a

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


开篇

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


适合读者


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


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

先报官方地址: https://github.com/mdmsoft/yi...


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


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


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


最后总结一下


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


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


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


安装和关键点配置

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


composer安装

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


composer require mdmsoft/yii2-admin "~2.0"

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


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


归档文件安装

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


第二步设置一个别名


// 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是个啥?大家可以看下 mdmadmincomponentsAccessControl 类,我贴一部分出来说


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运行的默认页面,第一步大功告成。


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


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'
],
],

看看运行图


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


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


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


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


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


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


为何多了一层route - 1

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


角色
权限
关系
资源
规则

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


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


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


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


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


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


原文 http://nai8.me/article/yii2-a...


以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索权限 , 扩展 , yii , 讲解 , admin , yii2 上部 ,以便于您获取更多的相关知识。

弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

40+云计算产品,6个月免费体验

现在注册,免费体验40+云产品,及域名优惠!

云服务器9.9元/月,大学必备