权限管理(RBAC)扩展 yii2-admin [扩展组件]

作者:上班偷偷打酱油 发布于:2016-04-11 浏览:5730次 收藏

简介

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  //路由管理

如果文章对您有所帮助,希望继续支持我们,您的支持是我们最大的动力 ¥打赏
标签: RBAC yii2-admin
声明:文章内容由作者原创或整理,未经允许,不得转载!
  • 评论于 2016-09-08 14:12:28

    怎么实现 每个用户显示他自己的文章信息

    回复于 2016-09-08 14:49:12 回复
    写一个规则就好了,具体怎么写查阅一下资料
    回复于 2016-09-12 09:37:08 回复
    谢谢 酱油大侠
    回复
  • 评论于 2016-08-05 10:10:14

    这是今天上午最开心的一件事了,昨天纠结了好久,终于安装好啦,谢谢酱油君的分享!

    回复于 2016-08-05 10:22:32 回复
    恩恩,没事,好久没看到你了
    回复于 2016-08-05 10:36:25 回复
    @上班偷偷打酱油 嘻嘻,是的,前一段时间在忙项目,没涉及到yii框架。
    回复于 2016-08-05 12:05:36 回复
    @stardust 恩,欢迎战士归来~
    回复
  • 评论于 2016-06-02 18:54:02

    blob.png

    你好 请问下class 这个mdm是什么呢

    回复
  • 评论于 2016-04-12 03:56:14

    超级管理员账号和密码是多少?

    回复于 2016-04-12 03:58:18 回复
    自己前台注册一个就可以了
    回复于 2016-05-07 20:14:31 回复

    @上班偷偷打酱油 我使用了mdmsoft-yii2-admin 但是我不想使用他自带的那些views,比如访问/admin/user/index 时我不想用他自带的默认的那个用户列表界面,我想自定义views界面,怎么实现?(除了去改他的源码)

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