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,'用户管理','&#xe610','#','','',''),
(2,1,'管理员管理','&#xe604','user/queryAll.do','','',''),
(3,1,'用户统计','&#xe604','test','','',''),
(4,0,'在线管理','&#xe610','#','','',''),
(5,4,'在线情况','&#xe604',NULL,'','',''),
(6,4,'在线聊天','&#xe604','article/list.do','','',''),
(7,0,'系统管理','&#xe610','#','','',''),
(8,7,'角色管理','&#xe604','role/queryAll.do','','',''),
(9,7,'权限管理','&#xe604','permission/queryAll.do','','',''),
(10,7,'菜单管理','&#xe604','menu/getMenus.do','','',''),
(11,0,'平台资料','&#xe610','#','','',''); /*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开源项目)的更多相关文章

  1. Xianfeng轻量级Java中间件平台:基于RBAC模型实现权限控制的原理

    首先,白话一下RBAC模型.RBAC是基于角色的访问控制(Role-Based Access Control)的简称.RBAC认为权限授权实际上是Who.What.How的问题.在RBAC模型中,wh ...

  2. 基于RBAC模型的权限设计:如何设计系统权限体系?

    一.什么是RABC RBAC(基于角色的权限控制)模型的核心是在用户和权限之间引入了角色的概念.取消了用户和权限的直接关联,改为通过用户关联角色.角色关联权限的方法来间接地赋予用户权限(如下图),从而 ...

  3. 基于RBAC模型的通用企业权限管理系统

    1. 为什么我们需要基于RBAC模型的通用企业权限管理系统 管理信息系统是一个复杂的人机交互系统,其中每个具体环节都可能受到安全威胁.构建强健的权限管理系统,保证管理信息系统的安全性是十分重要的.权限 ...

  4. 一种基于RBAC模型的动态访问控制改进方法

    本发明涉及一种基于RBAC模型的动态访问控制改进方法,属于访问控制领域.对原有RBAC模型进行了权限的改进和约束条件的改进,具体为将权限分为静态权限和动态权限,其中静态权限是非工作流的权限,动态权限是 ...

  5. 【Github开源项目体验】- ZFile 基于 Java 的在线网盘

    [Github开源项目体验]- ZFile 基于 Java 的在线网盘 在线云盘.网盘.OneDrive.云存储.私有云.对象存储.h5ai.上传.下载 date: 2022-08-02 addres ...

  6. 2015-2016最火的Android开源项目--github开源项目集锦(不看你就out了)

    标签: Android开发开源项目最火Android项目github 2015-2016最火的Android开源项目 本文整理与集结了近期github上使用最广泛最火热与最流行的开源项目,想要充电与提 ...

  7. 如何参与一个 GitHub 开源项目?

    最近一年开源项目特别的热,很多技术大会或论坛都以开源项目作为主题进行探讨,可见这是一种趋势.而Github作为开源项目的著名托管地,可谓无 人不知,越来越多的个人和公司纷纷加入到Github的大家族里 ...

  8. 如何参与一个GitHub开源项目

    Github作为开源项目的著名托管地,可谓无人不知,越来越多的个人和公司纷纷加入到Github的大家族里来,为开源尽一份绵薄之力.对于个人来讲,你把自己的项目托管到Github上并不表示你参与了Git ...

  9. 开源项目福利-github开源项目免费使用Azure PipeLine

    微软收购Github后,很多人猜想微软可能会砍掉VSTS,然而事实VSTS并没有砍掉,关于Azure Devops的详细信息可以查看 这篇博客,如果想查看原文也可以从链接里提供的原始地址里查看. 今天 ...

随机推荐

  1. mybatis,主键返回指的是返回到传入的对象中

  2. python----函数的动态传参

    函数的动态传参 *args 将所有的实参的位置参数聚合到一个元组,并将这个元组赋值给args 有些时候,对于函数,传入的实参数量可能是不固定的,也就是动态的,这个时候我们就需要用到函数的动态传参.下面 ...

  3. mysql,mybatis模糊查询

    <if test="deviceType != null and deviceType != ''">and device_type like CONCAT('%', ...

  4. linu系统文件授权命令

  5. linux系统版本大全

    Linux系统下载地址:http://www.jb51.net/LINUXjishu/239493.html linux系统教学视频:http://www.uplinux.com/shipin/lin ...

  6. Elasticsearch 中数据类型 text 与 keyword 的区别

    随着ElasticSearch 5.X 系列的到来, 同时也迎来了该版本的重大特性之一: 移除了string类型. 这个变动的根本原因是string类型会给我们带来很多困惑: 因为ElasticSea ...

  7. Codeforces543 B. Destroying Roads

    传送门:>Here< 题意:给出一张无向图(边权为1),并给出两对起点和终点以及距离:s1,t1,l1; s2,t2,l2; 要求删除尽量多的边,使得dis(s1,t1)<=l1, ...

  8. Git神器使用相关

    感谢 感谢作者的网站,本文所有的知识可以在上述网站了解到,讲的非常详细,感谢.(https://www.liaoxuefeng.com/wiki/0013739516305929606dd183612 ...

  9. Linux 遍历目录下面所有文件,将目录名、文件名转为小写

    当你从 Windows 服务器换到 Linux 服务器的时候,以前的上传目录的目录名.文件名会遇到大小写的问题.在 Windows 环境下面没有文件区分大小写的概念,而 Linux 却有严格的文件名大 ...

  10. SDOI2017 Round1 简要题解

    我们 TM 怎么又要上文化课..我 哔哔哔哔哔哔 「SDOI2017」数字表格 题意 有 \(T\) 组数据,求 \[ \prod_{i = 1}^{n} \prod_{j = 1}^{m} fib[ ...