koko 2015-11-13 10:42:07 98637次浏览 49条评论 101 25 0

yii2的访问权限默认是由自带的rbac组件在管理,需要自己编写相应的规则去实现权限管理,无图形界面。
yii2-admin是将rbac的管理可视化,只需要点几下鼠标就能设置好简单的规则。

本教程中软件版本及链接:yii2(v2.06,使用高级模板),yii2-admin(2.0)
yii2:https://github.com/yiisoft/yii2
yii2-admin:https://github.com/mdmsoft/yii2-admin
本文未涉及自定义规则和yii2-admin菜单
假定你已经安装好了yii2,且数据库中创建了user表。具体安装步骤可见此文档

使用composer安装yii2-admin
非windows环境下:

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

Windows下:

composer require mdmsoft/yii2-admin "~2.0"
composer update

国内网络环境复杂,有可能安装时间较长。如果长时间无响应,可终止命令重试。

配置yii2-admin运行环境

注意:如果将yii2-admin配置在common目录下是全局生效,会导致控制台(console)下命令报错。

因为仅将权限控制应用于frontend模块,所以将配置写到frontend目录下。
配置文件:frontend\config\main.php

return [
    'modules' => [
        'admin' => [
            'class' => 'mdm\admin\Module',
             'layout' => 'left-menu',//yii2-admin的导航菜单
        ]
        ...
    ],
    ...
    'components' => [
        ...
        'authManager' => [
            'class' => 'yii\rbac\DbManager', // 使用数据库管理配置文件
        ]
    ],
    'as access' => [
        'class' => 'mdm\admin\components\AccessControl',
        'allowActions' => [
            'site/*',//允许访问的节点,可自行添加
            'admin/*',//允许所有人访问admin节点及其子节点
        ]
    ],
];

创建相应的数据库表
在控制台中输入以下命令:

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

安装到此完成。
访问http#//localhost/path/to/index.php?r=admin可以看到yii2-admin的管理界面。效果如下图。

注:网址需要修改成你网站首页的实际地址。

配置访问权限示例
以节点terms(一个自定义的节点)为例,节点terms下共有index,view,create,update,delete五个子节点。
配置目标:
未登录用户仅能访问index节点
一般登录用户能访问index,view,create三个节点
管理员能访问所有节点

步骤一:添加可分配列表
打开yii2-admin路由列表页,点击可用输入框后面的刷新图标将列出当前网站所有可用的路由列表,选中terms各节点路由表添加至右侧可分配路由列表中。

步骤二:添加权限
权限列表=>新增权限,填好名称提交后,添加对应的路由规则即可。

可用列表中除了路由列表还有已经添加了的权限列表,一个权限可以包含另一个权限。

步骤三:添加角色
角色列表=》新增角色,分别添加管理员、一般用户、未登录用户,将对应的权限分配给角色。

步骤四:分配角色

分配界面列出来的用户名是当前系统中已注册的用户。现注册了admin和user账号用于演示。

点击账号后边的眼睛图案,进行权限分配。

按需要,给予相应的权限。

步骤五:配置网站默认访问权限
上面四步配置完成后,我们访问terms各节点测试结果:
以一般用户身份登录时,可以浏览、添加信息,要更新、删除信息时会提示无权操作。符合预期。

以管理员身份登录时,可进行所有操作。符合预期。
但是如果不登录,在访问terms首页时会跳转到登录页面。预期结果是未登录时能访问terms首页。
就是说当前系统默认不认可我们配置给未登录用户的权限。
只需要在配置文件中加一行指定默认规则的代码即可:

        'authManager'=> [
            'class' => 'yii\rbac\DbManager',
            'defaultRoles' => ['未登录用户'],//添加此行代码,指定默认规则为 '未登录用户'
        ],

未登录时再访问terms/index节点就能正常显示了,点别的操作时会跳到登录页面,因为未登录时仅有访问首页的权限。

除了在authManager中配置默认权限,在as access中也可以配置允许所有人访问的节点。

    'as access' => [
        'allowActions' => [//下面列出的节点,所有人都可以访问,针对未登录用户的配置也可以移至这里
            'admin/*',
            'site/*',
            ]
    ]

如果大家需要,空了再介绍下自定义规则和yii2-admin的菜单的应用。

原文链接:http://www.yiichina.com/tutorial/571
本文旨在介绍yii2-admin的基本用法,并非是最简洁的用法。如有不足之处,还请指正。

觉得很赞
  • 评论于 2016-05-26 13:09 举报

    按上面说的操作,结果点击角色页面报错:Call to a member function getRoles() on null,其他几个页面也是报错。

  • 评论于 2016-06-03 15:19 举报

    你好 使用yii2-admin安装成功后 点击菜单提示这个错误信息 Call to undefined method yii\helpers\Json::htmlEncode()' 这个是要怎样解决呢

    2 条回复
    评论于 2016-06-03 15:25 回复

    根据你的描述看不出问题由谁引起,出在哪里.你自己再排查下,最好能确定问题具体在哪里

    评论于 2016-06-03 16:46 回复

    好的 谢谢

  • 评论于 2016-06-23 16:11 举报

    2333 找权限界面管理 居然就找到你写的这篇了

    4 条回复
    评论于 2016-06-23 16:16 回复

    然后,就愉快的用上了?

    评论于 2016-06-23 16:36 回复

    没有...我想找的是Yii 自带的 rabc 模块的管理界面...找了半天没找到...你知道哪里有这种东西吗?

    评论于 2016-06-23 17:18 回复

    本来yii就没自带图形界面,这个插件就是实现图形化管理rbac

    评论于 2016-06-24 09:11 回复

    2333 阿里嘎多~ (:з」∠)

  • 评论于 2016-06-29 17:12 举报

    为什么我的不登录都能访问admin,布局文件也不是同一个

    1 条回复
    评论于 2016-06-30 09:09 回复

    在配置一节中讲了呀,我修改了布局方案。本来默认的就是不用登录可访问admin。

  • 评论于 2016-06-30 11:58 举报

    规则里面获取类,为什么一直找不到?格式要写成什么样的

    5 条回复
    评论于 2016-06-30 12:20 回复

    没理解你问题,再详细些

    评论于 2016-06-30 13:28 回复

    就是你的那个 terms控制器中需要做什么改动

    评论于 2016-06-30 13:38 回复

    不需要,你配置好了对应节点的权限它就生效了。

    评论于 2016-06-30 13:55 回复

    新增规则的时候控制器出现了'backend\controllers\MapController' must extend from 'yii bac\Rule' or its child class 这个错误。

    评论于 2016-06-30 14:07 回复

    好吧,貌似懂了,as access 这项配置必须开启

  • 评论于 2016-07-26 23:15 举报
    D:\study\yii2>composer require mdmsoft/yii2-admin
    Using version ^3.2 for mdmsoft/yii2-admin
    ./composer.json has been updated
    Loading composer repositories with package information
    Updating dependencies (including require-dev)
    Your requirements could not be resolved to an installable set of packages.
    
      Problem 1
        - mdmsoft/yii2-admin 3.2 requires deesoft/yii2-angular ~1.3 -> satisfiable by deesoft/yii2-angular[1.3, 1.x-dev].
        - mdmsoft/yii2-admin 3.x-dev requires deesoft/yii2-angular ~1.3 -> satisfiable by deesoft/yii2-angular[1.3, 1.x-dev].
        - deesoft/yii2-angular 1.x-dev requires bower-asset/angular ~1.3 -> no matching package found.
        - deesoft/yii2-angular 1.3 requires bower-asset/angular ~1.3 -> no matching package found.
        - Installation request for mdmsoft/yii2-admin ^3.2 -> satisfiable by mdmsoft/yii2-admin[3.2, 3.x-dev].
    
    Potential causes:
     - A typo in the package name
     - The package is not available in a stable-enough version according to your minimum-stability setting
       see <https://getcomposer.org/doc/04-schema.md#minimum-stability> for more details.
    
    Read <https://getcomposer.org/doc/articles/troubleshooting.md> for further common problems.
    
    Installation failed, reverting ./composer.json to its original content.
    

    我安装的时候出现这样的情况是为啥 求指点下

    1 条回复
    评论于 2016-07-27 11:53 回复

    应该是包依赖的问题,具体百度吧,composer我用的也头大

    觉得很赞
  • 评论于 2016-08-02 13:55 举报

    为什么我的是英文的呢

    1 条回复
    评论于 2016-08-04 15:23 回复

    检查你的yii语言环境配置

  • 评论于 2016-08-11 20:13 举报

    我使用Yii2的基本应用程序模板安装完成yii2-admin后,查看路由只能看到admin下的路由列表
    但是,路由列表中看不到app\controller下的控制器?请问为什么

    module配置如下:

    <?php
    return  [ 
            'admin' => [
                'class' => 'mdm\admin\Module',
                'layout'=>'left-menu',
                'mainLayout' => '@app/views/layouts/main.php',
            ],
            
            'controllerMap' => [
                'assignment' => [
                    'class' => 'mdm\admin\controllers\AssignmentController',
                    /* 'userClassName' => 'app\models\User', */
                    'idField' => 'user_id',
                    'usernameField' => 'username',
                    'fullnameField' => 'profile.full_name',
                    'extraColumns' => [
                         [
                            'attribute' => 'full_name',
                            'label' => 'Full Name',
                            'value' => function($model, $key, $index, $column) {
                                return $model->profile->full_name;
                            },
                         ],
                         [
                         'attribute' => 'dept_name',
                         'label' => 'Department',
                             'value' => function($model, $key, $index, $column) {
                                 return $model->profile->dept->name;
                                },
                         ],
                         [
                         'attribute' => 'post_name',
                             'label' => 'Post',
                                 'value' => function($model, $key, $index, $column) {
                                 return $model->profile->post->name;
                         },
                         ],
                     ],
                     'searchClass' => 'app\models\UserSearch'
                    ],
             ], 
    ];
    

    components配置如下

    <?php
    return 
        [
            'request' => [
                // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
                'cookieValidationKey' => 'Owod8SuyH0Syh2pjYY6LYGIGvKtQLHAt',
            ],
            'cache' => [
                'class' => 'yii\caching\FileCache',
            ],
            'user' => [
                'identityClass' => 'app\models\User',
                'enableAutoLogin' => true,
            ],
        
            'urlManager'=>[
                'enablePrettyUrl' => true,
                'showScriptName' => false,//index.php
                ],
        
            'errorHandler' => [
                'errorAction' => 'site/error',
            ],
                'mailer' => [
                    'class' => 'yii\swiftmailer\Mailer',
                    // send all mails to a file by default. You have to set
                    // 'useFileTransport' to false and configure a transport
                // for the mailer to send real emails.
                'useFileTransport' => true,
                ],
            'log' => [
                    'traceLevel' => YII_DEBUG ? 3 : 0,
                    'targets' => [
                        [
                            'class' => 'yii\log\FileTarget',
                            'levels' => ['error', 'warning'],
                    ],
                ],
                ],
                'db' => require(__DIR__ . '/db.php'),
                //权限管理
                'authManager' => [
                    'class' => 'yii\rbac\DbManager',
                    'itemTable' => '{{%auth_item}}',
                    'assignmentTable' => '{{%auth_assignment}}',
                    'itemChildTable' => '{{%auth_item_child}}',
                    "defaultRoles" => ["guest"],
            ],
            //样式管理
            'assetManager' => [
            'bundles' => [
                'dmstr\web\AdminLteAsset' => [
                    'skin' => 'skin-blue',
                ],
                ],
            ],
    
  • 评论于 2016-09-11 10:51 举报

    我的安装好了,不过是英文的,怎么设置成中文呢:
    _JM$L)JCFS7II))M6MMM@6J.png

    2 条回复
    评论于 2016-09-12 08:52 回复

    应该整站是通用语言配置。默认是和站点语言一致。自定义语言可以查看配置项目。

    评论于 2016-09-16 01:21 回复

    在main.php文件下的return里加一条语句
    'language' => 'zh-CN',//配置成中文

  • 评论于 2016-11-03 16:02 举报

    执行第一句多错了 22222.png 项目放到www yii 里面呢 ?

  • 评论于 2016-11-08 20:44 举报

    请问加上这条后GII就无法打开了吗?

    'authManager' => [
        'class' => 'yii\rbac\DbManager', // 使用数据库管理配置文件
    ],
    
    1 条回复
    评论于 2016-11-08 22:31 回复

    不会。你再检查下,或者看下日志,确定下具体的原因。或者你注释掉这个配置再测试下。

  • 评论于 2016-11-11 11:02 举报

    Yii2-admin只能对前台或者后台的权限进行管理,如何才能在后台实现对前后台的权限管理呢

    2 条回复
    评论于 2016-11-11 11:43 回复

    你在后台调用yii2-admin管理菜单不就行了? 不是只能对前后台管理哟。

    评论于 2017-07-22 17:32 回复

    意思是添加路由指向想要管理的模块的menu吗

  • 评论于 2016-11-11 11:38 举报

    我用的是basic版本的,没有frontend目录,那去哪配置yii2=admin的运行环境?

    1 条回复
    评论于 2016-11-11 11:44 回复

    基本版也是有配置文件的,然后还需要创建user表。

  • 评论于 2016-11-18 16:20 举报

    error.jpg

    这样配置后没登录还是可以访问 admin 目录。难道这么配置不是未登录只能访问 site 目录吗?

    2 条回复
    评论于 2016-11-19 12:13 回复

    你这不是允许所有人访问了site及admin么?

    评论于 2016-11-21 10:55 回复

    那个 admin 是注释起来的,问题已经解决,原因是没有把 as access 放在组件那一级。

  • 评论于 2016-11-30 15:38 举报

    能否对yii2-admin的页面进行修改呢

    3 条回复
    评论于 2016-11-30 17:04 回复

    可以呀,源码不都在你本地么。根据自己需求去改呗。

    评论于 2016-12-02 11:29 回复

    源码在vendor里面,是composer下载的,这里的文件应该不能改吧。
    根据官方文档,可以在配置文件里可以增加控制器。那么,我想是新增控制器,通过继承yii2-admin的控制器进行修改,这样可行吗?

    评论于 2016-12-02 11:57 回复

    都能改,只是改了以后就要修改composer信息不要去同步了。就用你自己修改的版本。这个相当于二次开发。

  • 评论于 2016-12-20 16:02 举报

    为什么我按照楼主的步骤安装好yii2-admin后,用户列表界面没有眼睛图案可以点击?而且我看了一下UserController,里面貌似也没有编辑页面,只有一个actionView,手动输入这个url后的界面和楼主截图的第四步图2完全不一样。

    1 条回复
    评论于 2016-12-20 16:40 回复

    眼睛图案是在用户后面的查看按钮。有用户才有显示。
    你界面跟我不一至,应该是配置的东西不一样。

  • 评论于 2017-01-17 16:04 举报

    规则列表是干嘛的?怎么感觉你都没有用到它

    1 条回复
    评论于 2017-01-17 16:19 回复

    确实没用到。
    教程一开始我就说了。
    这个功能应该是根据条件来判断对用户分配哪些权限。
    本教程中所有用户的权限都是手动指定的,适用于用户就几个人,且相对固定的情况。

  • 评论于 2017-04-06 16:53 举报

    这个插件需要框架版本2.0.7以上吗

    1 条回复
    评论于 2017-04-06 20:55 回复

    yii2.0.x都行

  • 评论于 2017-04-10 13:27 举报

    'as access' 是什么,是哪个类的属性

  • 评论于 2017-04-13 17:08 举报

    QQ图片20170413170232.png

    请问在执行yii migrate --migrationPath=@yii/rbac/migrations的时候出现如上的状况是对的吗?谢谢!

    2 条回复
    评论于 2017-04-16 23:38 回复

    提示说的很清理,要导数据库,要先配置使用数据库管理rbac

    评论于 2017-04-17 11:00 回复

    谢谢,研究一下。

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