六、RBAC权限配置
启动更多可分配路由
我们先访问路由页面 /admin/route ,尽可能的把左侧的全部选中,然后移动到右侧。
将admin用户写入到超级管理员并设置/*权限。
访问菜单列表 admin/menu 点击添加菜单admin/menu/create按钮。
名称:权限管理
父级名称:不填
路由:/admin/default/index
排序:1
数据:暂不填写
添加一个二级菜单"角色列表",如下:
名称:角色列表
父级名称:权限管理
路由:/admin/role/index
排序:2
数据:暂不填写
然后依次写入:权限列表(/admin/permission/index)、路由列表(admin/route/index)、规则管理(admin/rule/index)、分配用户到角色(/admin/assignment/index)等,具体如下。
修改 project_path/backend/views/layouts/left.php文件(保证这个文件是从 project_path/vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app/views/layouts/left.php地方复制过来的,否则去修改源文件),添加如下代码:
use mdm\admin\components\MenuHelper; <?= dmstr\widgets\Menu::widget([ 'options' => ['class' => 'sidebar-menu'], 'items' => MenuHelper::getAssignedMenu(Yii::$app->user->id), ]); ?>菜单小图标并控制菜单显示
我们在创建菜单的时候,没填写的"数据"一栏,我们填写json数据{"icon": "fa fa-user", "visible": false},其中icon代表列表前面的小图标;visible表示是否显示,值false表示隐藏,不填或者填true表示显示(z这个选项可以用于开发者模式,比如开发者可见,不是开发模式不可见)。
接下来我们对展示菜单的代码也做稍微的整改 project_path/vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app/views/layouts/left.php增加一个callback处理函数。
<?php use mdm\admin\components\MenuHelper; $callback = function($menu){ $data = json_decode($menu['data'], true); $items = $menu['children']; $return = [ 'label' => $menu['name'], 'url' => [$menu['route']], ]; //处理我们的配置 if ($data) { //visible isset($data['visible']) && $return['visible'] = $data['visible']; //icon isset($data['icon']) && $data['icon'] && $return['icon'] = $data['icon']; //other attribute e.g. class... $return['options'] = $data; } //没配置图标的显示默认图标 (!isset($return['icon']) || !$return['icon']) && $return['icon'] = 'fa fa-circle-o'; $items && $return['items'] = $items; return $return; }; ?> <?= dmstr\widgets\Menu::widget([ 'options' => ['class' => 'sidebar-menu'], 'items' => MenuHelper::getAssignedMenu(Yii::$app->user->id,null,$callback), ]); ?>
控制页面内的其他操作显示与隐藏
使用gii创建一个模块goods,生成model,以及对应的CURD
生成后修改代码中的控制器Controller将命名空间修改为如下
namespace backend\controllers;
修改 project_path/advanced/backend/views/goods/index.php页面的一些控制,如create、view、update和delete操作的权限。
//没有创建权限不显示按钮 if (Helper::checkRoute('create')) { echo Html::a('Create Goods', ['create'], ['class' => 'btn btn-success']); } ?> <?= GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], 'id', 'goods_name', 'goods_number', 'goods_desc', 'created_at', // 'updated_at', [ 'class' => 'yii\grid\ActionColumn', 'template' => Helper::filterActionColumn('{view}{update}{delete}'), ], ], ]); ?>
检查当前用户是否拥有上述权限goods/index
、goods/view
、goods/create
.. 如果没有效果请查看更新权限,如下。
管理员角色组相应得到的操作界面如下:
也就是说我们没有权限的按钮消失了,当在地址栏输入/goods/create
的时候你会发现也会提醒没有权限。
到这里就可以根据我们的业务逻辑自己添加角色、权限、菜单等等啦~