Yii2 框架RBAC 管理Smart版

2018-09-05  本文已影响122人  softfc

Smart Rbac Manager for Yii2

项目地址:https://github.com/rockyfc/yii2-smart-rbac
本应用建立在Yii2的数据结构基础之上,使用之前请先安装yii2框架的rbac推荐的数据表。

网上提供的rbac功能界面理解起来有一定的难度,所以在项目中开发中重写了一套
RBAC。并把它分享出来。

其中包括四个模块:

在开发过程中,为了使用户能方便快速的的进行二次开发,基本代码层次和架构均同yii2框架的Module
书写方法,代码主体代码用gii生成。并且未对view层做过多修饰,必要时可自行调整。

安装方法

推荐使用 composer 安装

或者运行以下命令

php composer.phar require --prefer-dist rockyfc/yii2-smart-rbac "*"

或者将以下代码写进你的composer.json 文件中执行

"rockyfc/yii2-smart-rbac": "*"

使用方法

将以下代码添加到你的配置文件中


//权限管理组件
'components' => [
    
    ...其他组件
    
    "authManager" => [
        // yii\rbac\DbManager的增强版
        "class" => 'smart\rbac\components\DbManager', 
        "defaultRoles" => ["guest"],
        
        //菜单表名称
        "menuTable" => 'menu',
    
        //可以绑定角色的用户表名称
        "userTable" => 'user', 
    ],
    
    ...其他组件
    
]
"modules" => [
    'rbac' => [
        'class' => 'smart\rbac\Module',
        
        //有些Module你并不想添加权限判断,则把它过滤掉
        'skipOn' => ['debug','gii'], 
    ],
]

请将菜单表导入数据库(表名称可自定义)

CREATE TABLE `menu` (
  `menu_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '菜单ID',
  `parent_id` int(11) DEFAULT NULL COMMENT '上级菜单',
  `menu_name` varchar(50) NOT NULL COMMENT '菜单名称',
  `url` varchar(300) NOT NULL DEFAULT '' COMMENT '链接地址',
  `icon` varchar(100) DEFAULT NULL COMMENT '菜单icon图',
  `create_at` int(11) DEFAULT NULL COMMENT '创建时间',
  `update_at` int(11) NOT NULL COMMENT '更新时间',
  `action_id` varchar(100) DEFAULT NULL COMMENT '当前菜单关联的actionId',
  `order_by` int(11) NOT NULL DEFAULT '0' COMMENT '排序值,越大越靠前',
  `status` int(1) NOT NULL DEFAULT '2' COMMENT '是否可用1:不可用 2:可用',
  PRIMARY KEY (`menu_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='菜单管理表';

我们将 @vendor\yiisoft\yii2\rbac\migrations\schema-mysql.sql 文件导入数据库,或者通过可视化管理工具、手动等方式创建改文件中的数据表。

访问方法

@title标签的使用

当你访问action列表的时候,如果"描述"列直接显示Action不够直观的话,可以在编写controller的时候给class和function的注释加上@title标签,重新"刷新"action列表就可以看到中文了。

/**
 *
 * @title 这里填写Controller标题
 */
class UserController extends Controller{

    /**
     * @title 这是action标题
     */
    public function actionIndex()
    {
       ...
    }
}

你也可以给Module class添加@title,方法同上。

上一篇下一篇

猜你喜欢

热点阅读