基于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的详细信息可以查看 这篇博客,如果想查看原文也可以从链接里提供的原始地址里查看. 今天 ...
随机推荐
- com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@1035079 -- APPARENT DEADLOCK!!! Complete Status:
com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@1035079 -- APPARENT DEADLOCK!!! C ...
- codeforces472C
Design Tutorial: Make It Nondeterministic CodeForces - 472C A way to make a new task is to make it n ...
- 搭建Hexo博客(一)-创建Hexo环境
Hexo配合github,可以创建自己的博客.基本原理是使用Hexo生成静态页面,发布到github上.在本地需要搭建Hexo环境. 1.安装nodejs 下载并安装NodeJS,官网地址:https ...
- Spring 使用介绍(十)—— 单元测试
一.概述 Spring测试框架提供了对单元测试的支持,以便使用spring的依赖注入和事务管理功能 maven依赖: <dependency> <groupId>junit&l ...
- oracle的用户账号密码设置
1. 可以用sqlplus system/你输入的密码 可以用sqlplus /nolog 可以用sqlplus /as sysdba2. @你scott.sql的路径3. 修改你的账号 alter ...
- xml 模块
XML ———可扩展的标记语言 也是一种通用的数据格式 之所以用它 也是因为跨平台 XML 的语法格式: 1,任何的起始标签都必须有一个结束标签. <> 起始标签 </>结束标 ...
- Django+Vue打造购物网站(一)
环境搭建 python == 3.6 Django == 2.0 创建工程 django-admin startproject MxShop 配置setting.py文件 # 数据库 DATABASE ...
- 接口压测初识java GC
1.先用Spring Boot 搭建 web 服务,构建api 服务 @RequestMapping("/index") @ResponseBody public String i ...
- MT【154】拉格朗日配方
(清华2017.4.29标准学术能力测试24) 设$x,y\in\mathbb{R}$,函数$f(x,y)=x^2+6y^2-2xy-14x-6y+72$的值域为$M$,则______ A.$1\in ...
- Wannafly挑战赛 22
爆零祭 T1 这题第一反应gcd啊 所以就把每个a[i]对m取模 然后求它们的gcd 即res = gcd(a[1] % m, a[2] % m, ... , a[n] % m) ans = 1 + ...