深入理解yii2之RBAC(模块化系统)
一、前言
上一篇文章我们已经大致谈过RBAC到底是什么和yii2底层RBAC接口的分析。
下面我深入理解一下RBAC权限分配,深入理解下yii2底层RBAC扩展,以及它是如何针对模块化系统的开发的?
二、介绍
2.1 下面是张大致的思维导图:

由图可见,我们对yiiRABC底层接口的扩展逻辑。
2.2 下面是数据表具体流程图:

我们扩展了四个数据表格:auth_module、auth_role、auth_role_item、auth_role_child。
2.3下面是引入的数据表结构:
auth_module表结构
|
Id primary key |
name(模块、功能名称) varchar(255) |
route(路由) varchar(255) |
pid smallint(6) |
create_at bigint |
update_at bigint |
status(是否已添加权限、角色) smallint(6) 1已添加 2未添加 |
|
1 |
营运管理 |
fake/one (伪路由) |
0 |
1555645646546 |
1555645646546 |
1 |
|
2 |
验卡管理 |
check-card/index |
1 |
1555645646546 |
1555645646546 |
1 |
|
3 |
商品管理 |
shop/index |
1 |
1555645646546 |
1555645646546 |
1 |
|
4 |
验卡 |
check-card/check |
2 |
1555645646546 |
1555645646546 |
1 |
|
5 |
验卡 |
check-card/check-card-number |
2 |
1555645646546 |
1555645646546 |
2 |
auth_role_child表结构
|
id primary key |
user_id(用户ID) bigint unique |
role_id(高级角色ID) bigint |
create_at bigint |
update_at bigint |
|
1 |
22 |
2 |
1555645646546 |
1555645646546 |
|
2 |
25 |
3 |
1555645646546 |
1555645646546 |
|
3 |
12 |
1 |
1555645646546 |
1555645646546 |
|
4 |
55 |
3 |
1555645646546 |
1555645646546 |
|
5 |
23 |
4 |
1555645646546 |
1555645646546 |
auth_role_item表结构
|
role_id(高级角色ID) bigint primary key 联合主键 |
auth_item(低级角色) varchar(255) primary key联合主键 |
create_at bigint |
update_at bigint |
|
1 |
营运管理 |
1555645646546 |
1555645646546 |
|
1 |
验卡 |
1555645646546 |
1555645646546 |
|
1 |
公共管理 |
1555645646546 |
1555645646546 |
|
1 |
卡种管理 |
1555645646546 |
1555645646546 |
|
1 |
课种管理 |
1555645646546 |
1555645646546 |
auth_role表结构
|
Id primary key |
name(高级角色) varchar(255) |
company_id(公司ID) smallint(6) |
venue_id(场馆ID) bigint |
update_at bigint |
create_at bigint |
derive_id(派生角色ID) bigint |
|
1 |
营运经理 |
1 |
[12,14,59] |
1555645646546 |
1555645646546 |
0 |
|
2 |
水吧员工 |
1 |
[12] |
1555645646546 |
1555645646546 |
1 |
|
3 |
CEO |
1 |
[12,14,16,19,20,28,49,55,54,58,53] |
1555645646546 |
1555645646546 |
0 |
|
4 |
团教经理 |
1 |
[12,14,59] |
1555645646546 |
1555645646546 |
0 |
|
5 |
吧台员工 |
1 |
[12] |
1555645646546 |
1555645646546 |
1 |
模块 =》 子模块 =》 功能 ; 我们动态的为RBAC基础表,添加权限和基础角色, 模块表中的name是auth_item中的基础角色名称。模块中的路由,则是auth_item中权限的名称。然后,基础角色和权限建立关系。分配好模块,添加过基础角色和权限,并建立关系后,
下一步,我们创建高级角色,给高级角色添加属性,如:组织架构等。创建好高级角色后,我们需要把低级角色绑定给我们的高级角色。好了,一切都准备就绪,我们就可以把用户绑定给我们的高级角色。注意,上一篇RBAC中说到,在模块化的系统中,由于菜单、模块、功能、以及页面元素过多,导致的RBAC在分配用户时,导致的基础角色过多问题。我们这里做了一套独有的解决方案,即:派生规则。我们可以拿到一个高级角色的权限,然后往下派生低级角色,基础高级角色pid是0,这样清晰明了了公司高层到基层的层级关系,
例如:总经理(高级角色);我们可以拿到它的权限,往下派生。总经理=》副经理=》负责人=》组长等等角色和权限。
三、尾语
好了,yii2的RBAC权限到这就结束了,小伙伴们有什么建议和疑问可以在下面评论留言,如需转载请注明作者和来源,支持原创。
深入理解yii2之RBAC(模块化系统)的更多相关文章
- 深入理解JVM(③)Java模块化系统
前言 JDK9引入的Java模块化系统(Java Platform Module System ,JPMS)是 对Java技术的一次重要升级,除了像之前JAR包哪有充当代码的容器之外,还包括: 依赖其 ...
- phpcms中的RBAC权限系统
PHPCMS中的RBAC权限系统主要用到了4张数据表:管理员表,角色表,菜单表,菜单权限表.先来看看数据库的数据表结构: admin 管理员表 ID 字段 类型 Null 默认 索引 额外 注释 1 ...
- 使用 UML 进行业务建模:理解业务用例与系统用例的相似和不同之处
使用 UML 进行业务建模:理解业务用例与系统用例的相似和不同之处 作者:Arthur V. English 出处:IBM 本文内容包括: 背景 业务用例模型与系统用例模型有什么相似之处? 业 ...
- TP支持菜单动态生成RBAC权限系统数据库结构设计方案
最简单基于RBAC权限系统数据库结构设计 包括如下几个表 1. 用户表 -- Table "t_user" DDL CREATE TABLE `t_user` ( `id` int ...
- 深入理解OSGI:Java模块化之路
简介 Java可能是近20年来最成功的开发技术,因其具备通用性.高效性.平台移植性和安全性而成为不同硬件平台理想的开发工具.从笔记本电脑到数据中心,从游戏控制台到科学超级计算机,从手机到互联网,Jav ...
- Unity3D_05_理解Unity的新GUI系统(UGUI)
理解Unity的新GUI系统(UGUI) Unity GUI 链接:UnityEngine.UI系统基础类架构图 Unity GUI 链接:UnityEngine Event & Event ...
- yii2 开源插件与系统
yii2干货集:https://github.com/forecho/awesome-yii2 商城 samdark/yii2-shop composer global require "f ...
- 【Unity3D基础教程】给初学者看的Unity教程(六):理解Unity的新GUI系统(UGUI)
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点推荐.谢谢! 理解UGUI的基础架构 UGUI是Unity在4 ...
- Java 9 揭秘(2. 模块化系统)
文 by / 林本托 Tips 做一个终身学习的人. 在此章节中,主要介绍以下内容: 在JDK 9之前Java源代码用于编写,打包和部署的方式以及该方法的潜在问题 JDK 9中有哪些模块 如何声明模块 ...
随机推荐
- .net程序集标示与绑定上下文
之前在实现Autofac扫描自加载程序集实现IOC时候遇到程序集依赖的问题,在网上搜了一下,没有发现中文世界的相关描述.随取google拿了几篇文章,翻译&自己的理解,之后会写一些小demo, ...
- mysql中count(*)和found_rows()的区别
count(*)和found_rows()都可以用来求查询记录的数量 而count(*)往往单独使用,found_rows()却可以跟上前面一个查询,即select * from table limi ...
- 【起航计划 026】2015 起航计划 Android APIDemo的魔鬼步伐 25 App->Notification->Status Bar 状态栏显示自定义的通知布局,省却声音、震动
这个例子的Icons Only 和 Icons and marquee 没有什么特别好说明的. 而Use Remote views in balloon 介绍了可以自定义在Extended Statu ...
- 【起航计划 017】2015 起航计划 Android APIDemo的魔鬼步伐 16 App->Alarm->Alarm Controller Alarm事件 PendingIntent Schedule AlarmManager
Alarm Controller演示如何在Android应用中使用Alarm事件,其功能和java.util.Timer ,TimerTask类似.但Alarm可以即使当前应用退出后也可以做到Sche ...
- SharePoint 2010 VS.net 2010 断点调试
当IE打开之后 1在代码的项目:右键:重新生成 2用WSPBuilder的Copy to GAC 3IE要调试的页面:刷新 4用WSPBuilder的Attach to IIS Worker Proc ...
- IDEA 打包jar
1.ctrl+shift+alt+s 弹出项目设置窗口,点击Artifacts页签,点+号,选择jar Empty.修改jar name,将右侧需要打包进去的资源拖到左侧,记住Output direc ...
- 用户管理的设计--3.jquery的ajax实现二级联动
页面效果 实现步骤 1.引入struts整合json的插件包 2.页面使用jquery的ajax调用二级联动的js //ajax的二级联动,使用选择的所属单位,查询该所属单位下对应的单位名称列表 fu ...
- centos6.5_64bit-Tomcat7安装部署
此次安装系统版本及软件版本 centos6.5-64bit java -1.7.0_45 jdk1.8.0_111 apache-tomcat-7.0.73 一.检查java版本信息 ...
- 简单粗暴的更换固态硬盘及WIN10 Ubuntu双系统
简介:本文希望帮助如本人一样的计算机小白,能够以最快的速度更换固态硬盘及安装系统. 1.提前将准备空白U盘(至少8G),利用UltraISO工具,或者软媒魔方,制作U盘启动盘. PS:需提前下载好WI ...
- 关于ASP.NET页面事件的知识点
ASP是动态服务器页面(ActiveServerPage)的英文缩写,是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单.方便的编程工具.那么关于ASP.NET ...