【原】无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础授权权限

上一篇《【原】无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础认证权限》介绍了实现Shiro的基础认证。本篇谈谈实现Shiro的基础授权。

需求:

① 某系统有公共模块、领导模块、管理员模块三个业务模块,均需要登录系统后才可以访问。

② admin、leader、employee三个人职位分别是管理员、领导、员工,均可登录系统。

③ 不同职位的人登录系统后,能看到的功能模块不同。管理员可以访问全部三个模块。领导可以访问除去管理员模块外的两个模块。员工只能访问公共模块。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

分析:

典型的运用授权权限的需求,继续考虑使用Shiro。

问题1、认证和授权怎么理解呢?

答:一点粗浅理解,比如通过了美国的签证能进入美国了,这就是获得了认证。

但是进入美国了,也只能去有授权的地方玩玩,五角大楼能进么?没有授权是不给进的。

所以,授权是在认证获得后进一步的安全管理。

问题2、需求在描述什么场景?

答:需求中包含了基于角色的权限访问控制RBAC(Role-Based Access Control)的设计思路。

简单来说,单个人对某某资源可操作。

【原】无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础授权权限

进一步考虑,如果是多个人对某某资源可操作呢?需要重复的这样设置么?运用归纳思想,把这样的多个人归为一类,形成了角色的概念。即这一角色的多个人对某某资源可操作。

RBAC认为权限授权实际上是Who、What、How的问题。在RBAC模型中,who、what、how构成了访问权限三元组,也就是“Who对What(Which)进行How的操作”。

【原】无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础授权权限

问题3、针对本需求的RBAC设计是怎么样的?

答:简化设计为:用户和角色为多对一关系、角色和资源为多对多关系

【原】无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础授权权限

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 0、数据库建表init.sql

1 -- 初始化 2 DROP TABLE sys_user; 3 DROP TABLE sys_role; 4 DROP TABLE sys_resource; 5 DROP TABLE sys_role_resource; 6 7 -- 用户信息表 8 CREATE TABLE sys_user 9 ( 10 userid INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户编号', 11 username VARCHAR(10) NOT NULL COMMENT '用户名称', 12 `password` VARCHAR(10) NOT NULL COMMENT '用户密码', 13 roleid INT NOT NULL COMMENT '角色编号' 14 ); 15 16 INSERT INTO sys_user VALUES(NULL, 'admin', '123', 1), (NULL, 'leader', '456', 2), (NULL, 'employee', '789', 3); 17 18 SELECT * FROM sys_user; 19 20 -- 角色信息表 21 CREATE TABLE sys_role 22 ( 23 roleid INT AUTO_INCREMENT PRIMARY KEY COMMENT '角色编号', 24 rolename VARCHAR(10) NOT NULL COMMENT '角色名称' 25 ); 26 27 INSERT INTO sys_role VALUES(NULL, '管理员'), (NULL, '领导'), (NULL, '员工'); 28 29 SELECT * FROM sys_role; 30 31 -- 资源信息表 32 CREATE TABLE sys_resource 33 ( 34 resourceid INT AUTO_INCREMENT PRIMARY KEY COMMENT '资源编号', 35 resourcename VARCHAR(10) NOT NULL COMMENT '资源名称', 36 resourceurl VARCHAR(50) NOT NULL COMMENT '资源URL' 37 ); 38 39 INSERT INTO sys_resource VALUES 40 (NULL, '公共模块', 'publicModule'), 41 (NULL, '领导模块', 'leaderModule'), 42 (NULL, '管理员模块', 'adminModule'); 43 44 SELECT * FROM sys_resource; 45 46 -- 角色资源关联表 47 CREATE TABLE sys_role_resource 48 ( 49 id INT AUTO_INCREMENT PRIMARY KEY COMMENT '关联编号', 50 roleid INT NOT NULL COMMENT '角色编号', 51 resourceid INT NOT NULL COMMENT '资源编号' 52 ); 53 54 INSERT INTO sys_role_resource VALUES 55 (NULL, 1, 1), (NULL, 1, 2), (NULL, 1, 3), 56 (NULL, 2, 1), (NULL, 2, 2), 57 (NULL, 3, 1); 58 59 SELECT * FROM sys_role_resource; 60 61 -- 获取用户能访问的资源URL 62 SELECT u.userid, rs.resourceurl 63 FROM sys_role_resource AS rr 64 INNER JOIN sys_resource AS rs ON rr.resourceid = rs.resourceid 65 INNER JOIN sys_role AS r ON rr.roleid = r.roleid 66 INNER JOIN sys_user AS u ON u.roleid = r.roleid 67 WHERE u.userid = 1;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwswz.html