基于RBAC模型的权限系统设计(Github开源项目)
RBAC(基于角色的访问控制):英文名称Rose base Access Controller。本博客介绍这种模型的权限系统设计。取消了用户和权限的直接关联,改为通过用户关联角色、角色关联权限的方法来间接地赋予用户权限。从而实现了解耦。RBAC在发展过程中分为以下几个版本。RBAC0、RBAC1、RBAC2、RBAC3。
- RBAC0,这是RBAC的初始形态,也是最原始、最简单的RBAC版本;

- RBAC1,基于RBAC0的优化,增加了角色的分层(即:子角色),子角色可以继承父角色的所有权限;

- RBAC2,基于RBAC0的另一种优化,增加了对角色的一些限制:角色互斥、角色容量等;

- RBAC3,最复杂也是最全面的RBAC模型,它在RBAC0的基础上,将RBAC1和RBAC2中的优化部分进行了整合;

项目的数据库设计
DROP TABLE IF EXISTS `sys_menu`; CREATE TABLE `sys_menu` (
`menuId` int(11) NOT NULL AUTO_INCREMENT COMMENT '菜单Id',
`parentId` int(11) DEFAULT NULL COMMENT '上级Id',
`menuName` varchar(100) DEFAULT NULL COMMENT '菜单名称',
`menuIcon` varchar(30) DEFAULT NULL COMMENT '菜单图标',
`menuUrl` varchar(100) DEFAULT NULL COMMENT '菜单链接',
`menuType` varchar(10) DEFAULT NULL COMMENT '菜单类型',
`menuOrder` varchar(10) DEFAULT NULL COMMENT '菜单排序',
`menuStatus` varchar(10) DEFAULT NULL COMMENT '菜单状态',
PRIMARY KEY (`menuId`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8; /*Data for the table `sys_menu` */ insert into `sys_menu`(`menuId`,`parentId`,`menuName`,`menuIcon`,`menuUrl`,`menuType`,`menuOrder`,`menuStatus`) values
(1,0,'用户管理','','#','','',''),
(2,1,'管理员管理','','user/queryAll.do','','',''),
(3,1,'用户统计','','test','','',''),
(4,0,'在线管理','','#','','',''),
(5,4,'在线情况','',NULL,'','',''),
(6,4,'在线聊天','','article/list.do','','',''),
(7,0,'系统管理','','#','','',''),
(8,7,'角色管理','','role/queryAll.do','','',''),
(9,7,'权限管理','','permission/queryAll.do','','',''),
(10,7,'菜单管理','','menu/getMenus.do','','',''),
(11,0,'平台资料','','#','','',''); /*Table structure for table `sys_operation` */ DROP TABLE IF EXISTS `sys_operation`; CREATE TABLE `sys_operation` (
`id` int(11) NOT NULL COMMENT '操作Id,主键',
`desc` varchar(100) DEFAULT NULL COMMENT '操作描述',
`name` varchar(100) DEFAULT NULL COMMENT '操作名称',
`operation` varchar(100) DEFAULT NULL COMMENT '操作标志',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_o_1` (`operation`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Data for the table `sys_operation` */ insert into `sys_operation`(`id`,`desc`,`name`,`operation`) values
(1,'创建操作','创建','create'),
(2,'编辑权限','编辑','edit'),
(3,'删除权限','删除','delete'),
(4,'浏览权限','浏览','view'); /*Table structure for table `sys_permission` */ DROP TABLE IF EXISTS `sys_permission`; CREATE TABLE `sys_permission` (
`id` int(11) NOT NULL COMMENT '权限Id',
`pdesc` varchar(100) DEFAULT NULL COMMENT '权限描述',
`name` varchar(100) DEFAULT NULL COMMENT '权限名称',
`menuId` int(11) DEFAULT NULL COMMENT '菜单Id',
PRIMARY KEY (`id`),
KEY `p_fk_1` (`menuId`),
CONSTRAINT `p_fk_1` FOREIGN KEY (`menuId`) REFERENCES `sys_menu` (`menuId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Data for the table `sys_permission` */ insert into `sys_permission`(`id`,`pdesc`,`name`,`menuId`) values
(1,'用户管理的权限','用户管理',1),
(2,'管理员管理的权限','管理员管理',2),
(3,'用户统计的权限','用户统计',3),
(4,'在线管理的权限','在线管理',4),
(5,'在线情况的权限','在线情况',5),
(6,'在线聊天的权限','在线聊天',6),
(7,'系统管理的权限','系统管理',7),
(8,'角色管理的权限','角色管理',8),
(9,'权限管理的权限','权限管理',9),
(10,'菜单管理的权限','菜单管理',10),
(11,'平台资料的权限','平台资料',11); /*Table structure for table `sys_permission_operation` */ DROP TABLE IF EXISTS `sys_permission_operation`; CREATE TABLE `sys_permission_operation` (
`permissionId` int(11) NOT NULL,
`operationId` int(11) NOT NULL,
PRIMARY KEY (`permissionId`,`operationId`),
KEY `po_fk_1` (`operationId`),
CONSTRAINT `po_fk_1` FOREIGN KEY (`operationId`) REFERENCES `sys_operation` (`id`),
CONSTRAINT `po_fk_2` FOREIGN KEY (`permissionId`) REFERENCES `sys_permission` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Data for the table `sys_permission_operation` */ insert into `sys_permission_operation`(`permissionId`,`operationId`) values
(1,1),
(2,2),
(3,3); /*Table structure for table `sys_role` */ DROP TABLE IF EXISTS `sys_role`; CREATE TABLE `sys_role` (
`roleId` int(11) NOT NULL AUTO_INCREMENT COMMENT '角色Id',
`roleName` varchar(100) DEFAULT NULL COMMENT '角色名称',
`roleDesc` varchar(100) DEFAULT NULL COMMENT '角色描述',
`role` varchar(100) DEFAULT NULL COMMENT '角色标志',
PRIMARY KEY (`roleId`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8; /*Data for the table `sys_role` */ insert into `sys_role`(`roleId`,`roleName`,`roleDesc`,`role`) values
(1,'超级管理员','超级管理员拥有所有权限','role'),
(2,'用户管理员','用户管理权限','role'),
(3,'角色管理员','角色管理权限','role'),
(4,'资源管理员','资源管理权限','role'),
(6,'操作权限管理员','操作权限管理','role'),
(7,'查看员','查看系统权限','role'),
(9,'用户','可以查看','role'); /*Table structure for table `sys_role_permission` */ DROP TABLE IF EXISTS `sys_role_permission`; CREATE TABLE `sys_role_permission` (
`rpId` varchar(12) NOT NULL COMMENT '表Id',
`roleId` int(11) NOT NULL COMMENT '角色Id',
`permissionId` int(11) NOT NULL COMMENT '权限Id',
PRIMARY KEY (`rpId`),
KEY `rp_fk_2` (`permissionId`),
KEY `rp_fk_1` (`roleId`),
CONSTRAINT `rp_fk_1` FOREIGN KEY (`roleId`) REFERENCES `sys_role` (`roleId`),
CONSTRAINT `rp_fk_2` FOREIGN KEY (`permissionId`) REFERENCES `sys_permission` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Data for the table `sys_role_permission` */ insert into `sys_role_permission`(`rpId`,`roleId`,`permissionId`) values
('02a97146f6f4',2,1),
('0bc217ced57a',1,1),
('1623edee1d80',1,2),
('2897c5ff0aa8',1,3),
('421ddf008a05',1,4),
('4b76f155fd74',9,1),
('4dcadb89531b',1,7),
('55eb164457e2',9,2),
('59084a9f6914',2,2),
('5a2b34b2f1a7',1,10),
('63a5d5a8dae6',1,9),
('9ad0b2c3be28',1,8),
('9fa9725142c1',2,3),
('ba83ae853640',1,6),
('d5aec431edf6',1,5); /*Table structure for table `sys_user` */ DROP TABLE IF EXISTS `sys_user`; CREATE TABLE `sys_user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户Id',
`username` varchar(100) NOT NULL COMMENT '用户名',
`password` varchar(100) NOT NULL COMMENT '密码',
`phone` varchar(11) DEFAULT NULL COMMENT '手机',
`sex` varchar(6) DEFAULT NULL COMMENT '性别',
`email` varchar(100) DEFAULT NULL COMMENT '邮箱',
`mark` varchar(100) DEFAULT NULL COMMENT '备注',
`rank` varchar(10) DEFAULT NULL COMMENT '账号等级',
`lastLogin` date DEFAULT NULL COMMENT '最后一次登录时间',
`loginIp` varchar(30) DEFAULT NULL COMMENT '登录ip',
`imageUrl` varchar(100) DEFAULT NULL COMMENT '头像图片路径',
`regTime` date NOT NULL COMMENT '注册时间',
`locked` tinyint(1) DEFAULT NULL COMMENT '账号是否被锁定',
`rights` varchar(100) DEFAULT NULL COMMENT '权限(没有使用)',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_u_1` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8; /*Data for the table `sys_user` */ insert into `sys_user`(`id`,`username`,`password`,`phone`,`sex`,`email`,`mark`,`rank`,`lastLogin`,`loginIp`,`imageUrl`,`regTime`,`locked`,`rights`) values
(1,'admin','28dca2a7b33b7413ad3bce1d58c26dd679c799f1','','男','313222@foxmail.com','超级管理员','admin','2017-08-12','127.0.0.1','/static/images/','2017-03-15',0,NULL),
(2,'sys','e68feeafe796b666a2e21089eb7aae9c678bf82d','','男','313222@foxmail.com','系统管理员','sys','2017-08-25','127.0.0.1','/static/images/','2017-03-15',0,NULL),
(3,'user','adf8e0d0828bde6e90c2bab72e7a2a763d88a0de','','男','313222@foxmail.com','用户','user','2017-08-18','127.0.0.1','/static/images/','2017-03-15',0,NULL),
(9,'test','','','保密','2312@qq.com','没有备注','user','2017-11-25','127.0.0.1',NULL,'2017-11-25',0,NULL); /*Table structure for table `sys_user_role` */ DROP TABLE IF EXISTS `sys_user_role`; CREATE TABLE `sys_user_role` (
`userId` int(11) NOT NULL COMMENT '用户Id,联合主键',
`roleId` int(11) NOT NULL COMMENT '角色Id,联合主键',
PRIMARY KEY (`userId`,`roleId`),
KEY `ur_fk_2` (`roleId`),
CONSTRAINT `ur_fk_1` FOREIGN KEY (`userId`) REFERENCES `sys_user` (`id`),
CONSTRAINT `ur_fk_2` FOREIGN KEY (`roleId`) REFERENCES `sys_role` (`roleId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Data for the table `sys_user_role` */ insert into `sys_user_role`(`userId`,`roleId`) values
(1,1),
(1,2),
(2,2),
(1,3),
(2,3),
(3,3),
(1,4),
(3,4),
(1,6),
(1,7),
(3,7),
(9,9);
Team的Github开源项目链接:https://github.com/u014427391/jeeplatform 
---------------------
作者:smileNicky
来源:CSDN
原文:https://blog.csdn.net/u014427391/article/details/78881316?utm_source=copy
基于RBAC模型的权限系统设计(Github开源项目)的更多相关文章
- Xianfeng轻量级Java中间件平台:基于RBAC模型实现权限控制的原理
首先,白话一下RBAC模型.RBAC是基于角色的访问控制(Role-Based Access Control)的简称.RBAC认为权限授权实际上是Who.What.How的问题.在RBAC模型中,wh ...
- 基于RBAC模型的权限设计:如何设计系统权限体系?
一.什么是RABC RBAC(基于角色的权限控制)模型的核心是在用户和权限之间引入了角色的概念.取消了用户和权限的直接关联,改为通过用户关联角色.角色关联权限的方法来间接地赋予用户权限(如下图),从而 ...
- 基于RBAC模型的通用企业权限管理系统
1. 为什么我们需要基于RBAC模型的通用企业权限管理系统 管理信息系统是一个复杂的人机交互系统,其中每个具体环节都可能受到安全威胁.构建强健的权限管理系统,保证管理信息系统的安全性是十分重要的.权限 ...
- 一种基于RBAC模型的动态访问控制改进方法
本发明涉及一种基于RBAC模型的动态访问控制改进方法,属于访问控制领域.对原有RBAC模型进行了权限的改进和约束条件的改进,具体为将权限分为静态权限和动态权限,其中静态权限是非工作流的权限,动态权限是 ...
- 【Github开源项目体验】- ZFile 基于 Java 的在线网盘
[Github开源项目体验]- ZFile 基于 Java 的在线网盘 在线云盘.网盘.OneDrive.云存储.私有云.对象存储.h5ai.上传.下载 date: 2022-08-02 addres ...
- 2015-2016最火的Android开源项目--github开源项目集锦(不看你就out了)
标签: Android开发开源项目最火Android项目github 2015-2016最火的Android开源项目 本文整理与集结了近期github上使用最广泛最火热与最流行的开源项目,想要充电与提 ...
- 如何参与一个 GitHub 开源项目?
最近一年开源项目特别的热,很多技术大会或论坛都以开源项目作为主题进行探讨,可见这是一种趋势.而Github作为开源项目的著名托管地,可谓无 人不知,越来越多的个人和公司纷纷加入到Github的大家族里 ...
- 如何参与一个GitHub开源项目
Github作为开源项目的著名托管地,可谓无人不知,越来越多的个人和公司纷纷加入到Github的大家族里来,为开源尽一份绵薄之力.对于个人来讲,你把自己的项目托管到Github上并不表示你参与了Git ...
- 开源项目福利-github开源项目免费使用Azure PipeLine
微软收购Github后,很多人猜想微软可能会砍掉VSTS,然而事实VSTS并没有砍掉,关于Azure Devops的详细信息可以查看 这篇博客,如果想查看原文也可以从链接里提供的原始地址里查看. 今天 ...
随机推荐
- How to flash Havoc on enchilada
update fastboot and adb fastboot oem unlock adb debug enchilada reboot to fastboot fastboot devices ...
- spring 在容器中一个bean依赖另一个bean 需要通过ref方式注入进去 通过构造器 或property
spring 在容器中一个bean依赖另一个bean 需要通过ref方式注入进去 通过构造器 或property
- U68464 滑稽树上滑稽果(guo)
U68464 滑稽树上滑稽果(guo) 题目描述 小小迪有 n 个约会对象,每个对象有一个约会时长 p[i],小小迪 想尽可能多的去完成他的约会(假设小小迪可以瞬移),每个对象还有 一个忍耐时间 q[ ...
- JVM是如何处理异常的
JVM处理异常 异常处理的两大组成要素是抛出异常和捕获异常.这两大要素共同实现程序控制流的非正常转移. 抛出异常可分为显式和隐式两种.显式抛异常的主体是应用程序,指的是在程序中使用throw关键字,手 ...
- hadoop安装要领
1.安装JDK tar -zxvf jdk-7u75-linux-i586.tar.gz -C /root/training/ vi ~/.bash_profile JAVA_HOME=/root/t ...
- JPA save新增问题
前台传递json,有关联表的情况下 { //主键 "pId" : 0, "platformId" : 0, "poNo" : "p ...
- tp5命令行基础介绍
查看指令 生成模块 生成文件 生成类库映射文件 生成路由缓存文件 生成数据表字段缓存文件 指令扩展示例 命令行调试 命令行颜色支持 调用命令 查看指令 命令行工具需要在命令行下面执行,请先确保你的ph ...
- Gogs 部署安装(Linux)
环境 centos7:golang+mysqldb+git. 安装配置环境[mysql装了请跳过] yum install mysql-community-server go git -y 配置防火墙 ...
- 【HDU 4343】Interval query(倍增)
BUPT2017 wintertraining(15) #8D 题意 给你x轴上的N个线段,M次查询,每次问你[l,r]区间里最多有多少个不相交的线段.(0<N, M<=100000) 限 ...
- rsyncd 配置使用
查询rpm -qa | grep rsync 配置文件需手动创建: touch /etc/rsyncd.conf 配置/etc/rsyncd.conf: (全局配置) uid = root //rsy ...