深入浅析Yii admin的权限控制

说到CMS,最需要有的东西就是权限控制,特别是一些复杂的场景,多用户,多角色,多部门,子父级查看等等。最近在开发一个线下销售的东东,这个系统分为管理员端,省代端,客户端,门店端,销售端, 部门端,部门老大下面分子部门等等,恶心的需求。我们这个项目使用yii框架开发,yii在php届还是比较流行的,虽然说laravel现在横行,但是一些部门一些团队还是采用了yii框架,比如我们。

  我是刚接触yii这个框架,开始的时候对这种面向组件的框架甚是别扭。当时打算自己写权限的,自己创建权限表,关联表等,但是学习使用yii开发文档后,发现有个权限控制RBAC,借助于yii-admin可以实现完美的权限,菜单的控制。这篇博客分两部门,第一部分我会讲述怎么搭建权限管理包括:安装yii-admin,创建权限表,使用权限控制菜单和访问权限等基本的操作,这部分大致说一下,想要看更详细的步骤可以参考这个比较详细的讲解:,毕竟搭建和使用都不是难事,只要按照步骤来。第二部分我会讲解我自己的理解,包括:菜单的优化,子页面导航的选择性高亮,分角色显示菜单,权限检测的改进等。

一、yii-admin的搭建相关

1、搭建yii-admin

  首先你应该安装一个yii矿建,因为yii-admin是基于yii框架的,没有框架玩毛啊!你可以在github上直接下载源码

  yii2:https://github.com/yiisoft/yii2

  yii2-admin:https://github.com/mdmsoft/yii2-admin

  当然你可以使用composer来安装,这样最好不过,如果你安装好了yii,你就可以切换到项目目录下,直接执行下面的命令:

php composer.phar require mdmsoft/yii2-admin "~2.0" php composer.phar update

  然后配置中加入yii-admin的配置项,值的注意的是如果yii2-admin配置在common目录下是全局生效,那么你在执行命令控制台的时候就会报错,所以应将权限控制作用于web模块,我们这个项目没有使用高级模板,所以你可以直接把配置写在config下面的web.php中,配置如下:

先定义别名:

'aliases' => [ '@mdm/admin' => '@vendor/mdmsoft/yii2-admin', ],

在modules中添加admin组件:

'admin' => [ 'class' => 'mdm\admin\Module', 'layout' => '@app/views/layouts/main_nifty',//yii2-admin的导航菜单 ],

添加添加authManager配置项:

需要强调的是,yii中的authManager组件有PhpManager和DbManager两种方式,这两种方式是由区别的,PhpManager将权限关系保存在文件里,DbManager方式,将权限关系保存在数据库。我们采用保存在数据库中的方式。

'authManager' => [ 'class' => 'yii\rbac\DbManager', // or use 'yii\rbac\DbManager' ],

添加as access:

'as access' => [ 'class' => 'mdm\admin\components\AccessControl', 'allowActions' => [ // add or remove allowed actions to this list // 'admin/*', //'*', 'site/*', 'api/*', ] ],

需要说的是未知不要放错了,如下图所示:

深入浅析Yii admin的权限控制

2、配置数据库权限表

这一步不用自己去写,命令行切换到yii2目录,执行下面命令,创建rbac需要的表,但是数据库需要自己创建名字是:yii2basic,如果要执行命令,就需要把你刚下配置好的配置文件在在console.php中也写一份,如果执行不成功,可以吧生成数据表的脚本拿出来自己执行。

yii migrate --migrationPath=@yii/rbac/migrations yii migrate --migrationPath=@mdm/admin/migrations

如果执行成功会生成5张表,还需要一张user表,你可以自己添加

menu //菜单表

auth_rule //规则表

auth_item_child //角色对应的权限,parent角色,child权限名

auth_item //角色、权限表,type=1表示角色,type=2表示权限

auth_assignment //角色与用户对应关系表

  如果全部成功的话,再访问index.php?r=admin 就可以了看到权限的控制可视化页面,如果出错,你认真查看错误原因,基本上都是配置不对。配置好的话,访问其他页面就没有权限了,然后你可以修改as access中的allowActions,在开发api或者一些共用的模块的时候很有用,因为这些页面不需要进行权限的控制。

权限控制页面如下图:

3、进行菜单控制

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/a50fdab610fa5c94ec2ae4d63bbd7bd4.html