specialnot 2015-10-13 11:05:49 11157次浏览 3条评论 15 1 1

YII2 advanced 基于 RBAC 的权限管理

一、首先要在 common/config/main.php 中加入如下配置

'authManager' => [
    'class' => 'yii\rbac\DbManager',
    'itemTable' => 'auth_item',
    'assignmentTable' => 'auth_assignment',
    'itemChildTable' => 'auth_item_child',
],

二、在 vendor/yiisoft/yii2/rbac/migrations 中找到 …rbac_init.php,并将数据库迁移文件放入 console/migrations 中

三、执行 php yii migrate 生成数据库,生成四个表
yii\rbac\DbManager::$itemTable: 该表存放授权条目(译者注:即角色和权限)。默认表名为 "auth_item" 。
yii\rbac\DbManager::$itemChildTable: 该表存放授权条目的层次关系。默认表名为 "auth_item_child"。
yii\rbac\DbManager::$assignmentTable: 该表存放授权条目对用户的指派情况。默认表名为 "auth_assignment"。
yii\rbac\DbManager::$ruleTable: 该表存放规则。默认表名为 "auth_rule"。

四、权限分配思路

1、建立权限节点
2、建立角色
3、给角色分配权限
4、为用户选择角色
5、验证用户权限

相关链接

  1. RBAC 权限节点管理
  2. RBAC 角色管理,为角色分配权限
  3. RBAC 为用户选择角色
  4. RBAC 检查用户是否有权限
觉得很赞
  • 评论于 2015-10-14 13:33 举报

    我在main.php里面添加了这个配置后,执行./yii migrate/up报错

    Exception 'yii\base\InvalidCallException' with message 'Setting read-only property: yii\console\Application::authManager'

    in /var/www/html/ebip/vendor/yiisoft/yii2/base/Component.php:195

    Stack trace:
    #0 /var/www/html/ebip/vendor/yiisoft/yii2/BaseYii.php(518): yii\base\Component->set('authManager', Array)
    #1 /var/www/html/ebip/vendor/yiisoft/yii2/base/Object.php(105): yii\BaseYii::configure(Object(yii\console\Application), Array)
    #2 /var/www/html/ebip/vendor/yiisoft/yii2/base/Application.php(206): yii\base\Object->
    construct(Array)
    #3 /var/www/html/ebip/vendor/yiisoft/yii2/console/Application.php(85): yii\base\Application->construct(Array)
    #4 /var/www/html/ebip/yii(26): yii\console\Application->
    construct(Array)

    4 条回复
    评论于 2015-10-14 13:34 回复

    设置了只读的属性

    评论于 2015-10-14 16:36 回复

    需要把它 放入 components组件中,你看一下你的是不是这样放的
    'components' => [
    'authManager' => [

    'class' => 'yii\rbac\DbManager',
    'itemTable' => 'auth_item',
    'assignmentTable' => 'auth_assignment',
    'itemChildTable' => 'auth_item_child',
    

    ],
    ]

    评论于 2015-10-15 14:04 回复

    对,这个 问题已经解决了,但是你的文档里,后面两步我没有实现,一个RBAC 检查用户是否有权限的beforeAction不知道在哪写;二是 RBAC 为用户选择角色里user视图和控制器我也没有;我刚用YII,请指教

    评论于 2019-04-30 15:23 回复

    请问这个“只读属性”是在哪儿设置的,我也遇到了这个问题,被卡住了。

  • 评论于 2016-06-10 09:51 举报

    这个是YII1.0的吗?

  • 评论于 2018-05-23 10:07 举报

    Stack trace:
    #0 D:\shop\vendor\yiisoft\yii2\db\Command.php(1263): yii\db\Schema->convertException(Object(PDOException), 'CREATE TABLE u...') #1 D:\shop\vendor\yiisoft\yii2\db\Command.php(1075): yii\db\Command->internalExecute('CREATE TABLE u...')
    #2 D:\shop\vendor\yiisoft\yii2\db\Migration.php(323): yii\db\Command->execute()
    #3 D:\shop\console\migrations\m130524_201442_init.php(26): yii\db\Migration->createTable('{{%user}}', Array, 'CHARACTER SET u...')
    #4 D:\shop\vendor\yiisoft\yii2\console\controllers\BaseMigrateController.php(725): m130524_201442_init->up()
    #5 D:\shop\vendor\yiisoft\yii2\console\controllers\BaseMigrateController.php(199): yii\console\controllers\BaseMigrateController->migrateUp('m130524201442...')
    #6 [internal function]: yii\console\controllers\BaseMigrateController->actionUp(0)
    #7 D:\shop\vendor\yiisoft\yii2\base\InlineAction.php(57): call_user_func_array(Array, Array)
    #8 D:\shop\vendor\yiisoft\yii2\base\Controller.php(157): yii\base\InlineAction->runWithParams(Array)
    #9 D:\shop\vendor\yiisoft\yii2\console\Controller.php(148): yii\base\Controller->runAction('', Array)
    #10 D:\shop\vendor\yiisoft\yii2\base\Module.php(528): yii\console\Controller->runAction('', Array)
    #11 D:\shop\vendor\yiisoft\yii2\console\Application.php(180): yii\base\Module->runAction('migrate', Array)
    #12 D:\shop\vendor\yiisoft\yii2\console\Application.php(147): yii\console\Application->runAction('migrate', Array)
    #13 D:\shop\vendor\yiisoft\yii2\base\Application.php(386): yii\console\Application->handleRequest(Object(yii\console\Request))
    #14 D:\shop\yii(23): yii\base\Application->run()
    #15 {main}
    这个错是以为啥?

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