权限管理(RBAC)扩展 yii2-admin

简介

Yii2-Admin是一套基于RBAC的权限管理扩展组件,通过简单的安装配置即可完成一整套的权限管理机制,非常方便!本文酱油君将为大家介绍这套实用的扩展

下载安装

1:git源码地址:https://github.com/mdmsoft/yii2-admin

通过composer安装

注意:安装之前先确定composer是不是最新的:

如果提示长时间未更新通过下面的命令更新composer

composer self-update
composer install

下载yii2-admin:

composer require mdmsoft/yii2-admin "~2.0"

提示:composer不会的童鞋可以看下composer教程 或者网上查一下资料

配置

在相应的配置文件中添加以下配置:

以高级版为例:backend/config/main.php

'modules' => [
        'admin' => [
            'class' => 'mdm\admin\Module',
            'layout' => 'left-menu',         //yii2-admin的导航菜单
        ],
    ],
    
'aliases' => [
        '@mdm/admin' => '@vendor/mdmsoft/yii2-admin',
    ],
    
'as access' => [
        'class' => 'mdm\admin\components\AccessControl',
        'allowActions' => [
            'admin/*',            //配置允许权限
        ]
    ],

配置RBAC

注意:如果已经安装和配置了RBAC可以跳过这步:

在应用配置文件中配置 authManager

return [    
    // ...
    'components' => [        
        'authManager' => [            
            'class' => 'yii\rbac\DbManager',
            'defaultRoles' => ['guest'],
        ],        
        // ...
    ],
];

DbManager 使用4个数据库表存放它的数据:

  • 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"。

继续之前,你需要在数据库中创建这些表。你可以使用存放在 @yii/rbac/migrations 目录中的数据库迁移文件来做这件事(译者注:根据本人经验,最好是将授权数据初始化命令也写到这个 RBAC 数据库迁移文件中):

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

现在可以通过 \Yii::$app->authManager 访问 authManager 。

或者直接导入sql

drop table if exists `menu`;
drop table if exists `user` cascade;

create table `menu`
(
    `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `name` varchar(128),
    `parent` int(11),
    `route` varchar(256),
    `order` int(11),
    `data`   blob,
    foreign key (`parent`) references `menu`(`id`)  ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

create table `user`
(
    `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `username` varchar(32) NOT NULL,
    `auth_key` varchar(32) NOT NULL,
    `password_hash` varchar(256) NOT NULL,
    `password_reset_token` varchar(256),
    `email` varchar(256) NOT NULL,
    `status` integer not null default 10,
    `created_at` integer not null,
    `updated_at` integer not null
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

rbac数据表:

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;

演示

访问地址:注:以下地址为url美化之后的地址,url美化教程

域名/admin/user/index   //用户管理

域名/admin/role/index   //角色管理

域名/admin/permission/index  //权限管理

域名/admin/rule/index  //规则管理

域名/admin/assignment/index  //分配权限

域名/admin/route/index  //路由管理