Yii 2.0 搭建基于RBAC权限的后台管理系统 (三)

六、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/indexgoods/viewgoods/create.. 如果没有效果请查看更新权限,如下。


管理员角色组相应得到的操作界面如下:


也就是说我们没有权限的按钮消失了,当在地址栏输入/goods/create的时候你会发现也会提醒没有权限。

到这里就可以根据我们的业务逻辑自己添加角色、权限、菜单等等啦~

猜你喜欢

转载自blog.csdn.net/a1513049385/article/details/80667307
今日推荐