鲁鲁槟 2016-07-25 22:59:40 5424次浏览 4条评论 4 3 0

作者:鲁鲁槟 出处:http://www.luluqi.cn/post/default/show-post?id=128

本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

效果:“普通管理员”可以进行gii和debug的操作,而“站长”除了可以进行gii和debug的操作,还可以进行“权限控制”的操作。

一、创建“调试”的权限:可以进行 gii 和 degug 的操作

1、点击“路由”,将 /gii/ 、/gii/default/index、/debug/ 、/degug/index 写入到 auth_item 表

2、点击“权限”,创建名为“调试”的权限,并分配 /gii/ 和 /debug/ 路由

3、点击“角色”,创建名为“普通管理员”的角色,并分配“调式”的权限

二、创建“调式”的菜单

1、点击“菜单”进行创建以下菜单

2、分配“调式“权限给”站长“角色

3、刷新页面,你会发现左侧导航栏多了调式的菜单

三、创建“普通管理员“角色的新用户

1、进入前台 127.0.0.1/advanced/frontend/web 进行注册新用户

2、进入后台 127.0.0.1/advanced/backend/web/admin/assignment/index

点击 admin 的查看按钮,为 admin 分配普通管理员的角色

3、刷新页面,你会发现 admin 用户也多了 调试的菜单

四、rbac 的作用

1、在步骤三、2中 admin 用户通过 输入地址:127.0.0.1/advanced/backend/web/admin/assignment 进入分配角色的页面,现在我们通过配置限制用户访问,配置文件为 backend/main.php

2、现在 admin 用户通过 127.0.0.1/advanced/backend/web/admin/assignment 会出现下面的界面,说明 rbac 成功了

3、退出 admin 用户,登录 master 用户,发现 master 可以执行 admin/assignment 操作

注:如有疑问或者有更好的方法,请加入QQ群453300767 进行讨论或在下方进行评论。

觉得很赞
  • 评论于 2016-07-29 13:39 举报

    通俗易懂,不错的教程,感谢楼主

  • 评论于 2016-07-29 13:57 举报

    按照教程配置好了,但是admin用户执行admin/assignment 操作依旧可行,是为什么
    admin用户只指定了普通管理员角色,普通管理员角色只有调试权限确认无误,main.php的配置也改了

    'allowActions' => [
                //这里是允许访问的action
                //controller/action
                // * 表示允许所有,后期会介绍这个
                'site/*'
                //'*'
            ]
    

    请问还有哪里可能遗漏

    3 条回复
    评论于 2016-07-29 14:27 回复

    你可能把上面的'as access'配置写在‘components’组件当中了?

    评论于 2016-07-29 14:32 回复

    没有,在return的数组的最外层

    return [
        'id' => 'app-backend',
        'basePath' => dirname(__DIR__),
        'controllerNamespace' => 'backend\controllers',
        'bootstrap' => ['log'],
        'modules' => [
            "admin" => [
                "class" => "mdm\admin\Module",
            ],
        ],
        "aliases" => [
            "@mdm/admin" => "@vendor/mdmsoft/yii2-admin",
        ],
        'as access' => [
            'class' => 'mdm\admin\components\AccessControl',
            'allowActions' => [
                //这里是允许访问的action
                //controller/action
                // * 表示允许所有,后期会介绍这个
                'site/*'
                //'*'
            ]
        ],
        'components' => [
            'request' => [
                'csrfParam' => '_csrf-backend',
            ],
            'user' => [
                'identityClass' => 'common\models\User',
                'enableAutoLogin' => true,
                'identityCookie' => ['name' => '_identity-backend', 'httpOnly' => true],
            ],
            'session' => [
                // this is the name of the session cookie used for login on the backend
                'name' => 'advanced-backend',
            ],
            'log' => [
                'traceLevel' => YII_DEBUG ? 3 : 0,
                'targets' => [
                    [
                        'class' => 'yii\log\FileTarget',
                        'levels' => ['error', 'warning'],
                    ],
                ],
            ],
            'errorHandler' => [
                'errorAction' => 'site/error',
            ],
            /*
            'urlManager' => [
                'enablePrettyUrl' => true,
                'showScriptName' => false,
                'rules' => [
                ],
            ],
            */
           "urlManager" => [
                //用于表明 urlManager 是否启用URL美化功能
                "enablePrettyUrl" => true,
                // 是否在URL中显示入口脚本
                "showScriptName" => false,
            ],
            "authManager" => [
                "class" => 'yii\rbac\DbManager',
                "defaultRoles" => ["guest"],
            ],
        ],
        'params' => $params,
    ];
    
    
    评论于 2016-10-28 11:06 回复

    清下cookies试试

  • 评论于 2016-10-28 09:46 举报

    二 1中,第二张图挂了

    1 条回复
    评论于 2016-10-31 14:58 回复

    点击原文查看吧

您需要登录后才可以评论。登录 | 立即注册