yii2.0权限笔记

首页 / php框架 / 正文

创建权限控制所需要的数据表

  1. yii 默认已经帮我们准备好了数据表

    vendor/yiisoft/yii2/rbac/migrations/schema-mysql.sql 
    // 直接打开这个文件导入数据库就可以了
    如果不愿意去找这个文件,我在最下附录边给大家已经把代码粘贴过来了。
  2. 当然也可以让yii自己生成数据表

    yii migrate --migrationPath=@yii/rbac/migrations/
    // 进入你的项目根目录,执行这句话完美创建。(如果你是windows环境可以进入项目根目录后摁住shif+鼠标右键,选择在此处打开命令窗口)

    使用 yii2-admin

  3. 安装 RBAC Manager for Yii 2

    github上有非常详细的文档
    • 使用composer进行安装

      php composer.phar require mdmsoft/yii2-admin "~1.0"
      or
      php composer.phar require mdmsoft/yii2-admin "~2.0"
      # 它会吧文件安装到vendor目录下的mdmsoft目录
  4. 权限配置

    配置文件位置: backend/config/main.php
    "modules" => [    
        "admin" => [        
            "class" => "mdm\admin\Module",   
        ],
    ],
    "aliases" => [    
        "@mdm/admin" => "@vendor/mdmsoft/yii2-admin",
    ],
    //这里必须添加authManager配置项
    "components" => [   
         ...    
        //components数组中加入authManager组件,有PhpManager和DbManager两种方式,    
        //PhpManager将权限关系保存在文件里,这里使用的是DbManager方式,将权限关系保存在数据库.    
        "authManager" => [        
            "class" => 'yii\rbac\DbManager', //这里记得用单引号而不是双引号        
            "defaultRoles" => ["guest"],    
        ],   
         ...
    ],
    //严重警告!!!as access位置不要添加错了,不可以加到components里边!!!!
    'as access' => [
        'class' => 'mdm\admin\components\AccessControl',
        'allowActions' => [
            //这里是允许访问的action
            //controller/action
        ]
    ],
  5. 检验权限模块是否有效

    如果已经下载好了yii2-admin,也已经配置了相关配置,那么此时你刷新任何页面都是无法访问的,因为都没有权限进入。为了开发方便,可以先允许任何人都有权限
    'as access' => [
        'class' => 'mdm\admin\components\AccessControl',
        'allowActions' => [
            //这里是允许访问的action
            '*'
        ]
    ],
  6. 参考于 白狼栈

附录

  1. vendor/yiisoft/yii2/rbac/migrations/schema-mysql.sql

    /**
     * Database schema required by \yii\rbac\DbManager.
     *
     * @author Qiang Xue <qiang.xue@gmail.com>
     * @author Alexander Kochetov <creocoder@gmail.com>
     * @link http://www.yiiframework.com/
     * @copyright 2008 Yii Software LLC
     * @license http://www.yiiframework.com/license/
     * @since 2.0
     */
    
    drop table if exists `auth_assignment`;
    drop table if exists `auth_item_child`;
    drop table if exists `auth_item`;
    drop table if exists `auth_rule`;
    
    create table `auth_rule`
    (
       `name`                 varchar(64) not null,
       `data`                 text,
       `created_at`           integer,
       `updated_at`           integer,
        primary key (`name`)
    ) engine InnoDB;
    
    create table `auth_item`
    (
       `name`                 varchar(64) not null,
       `type`                 integer not null,
       `description`          text,
       `rule_name`            varchar(64),
       `data`                 text,
       `created_at`           integer,
       `updated_at`           integer,
       primary key (`name`),
       foreign key (`rule_name`) references `auth_rule` (`name`) on delete set null on update cascade,
       key `type` (`type`)
    ) engine InnoDB;
    
    create table `auth_item_child`
    (
       `parent`               varchar(64) not null,
       `child`                varchar(64) not null,
       primary key (`parent`, `child`),
       foreign key (`parent`) references `auth_item` (`name`) on delete cascade on update cascade,
       foreign key (`child`) references `auth_item` (`name`) on delete cascade on update cascade
    ) engine InnoDB;
    
    create table `auth_assignment`
    (
       `item_name`            varchar(64) not null,
       `user_id`              varchar(64) not null,
       `created_at`           integer,
       primary key (`item_name`, `user_id`),
       foreign key (`item_name`) references `auth_item` (`name`) on delete cascade on update cascade
    ) engine InnoDB;
    
打赏
评论区
头像
    头像
    rslrqsdves
    2024年9月23日 09:54
    回复

    想想你的文章写的特别好