最近做项目涉及到权限控制,第一次接触shiro框架,结合网上教程爬了两天的坑大致上是弄懂了。
对于权限模块的设计思路,一般都是基于角色的访问控制(RBAC),但在GitHub上看到个RBAC新解,按照这种思路可以很容易做到接口级别的权限控制。
本质上就是接口只校验权限,而非校验角色,在登陆的时候查询出用户的角色,并将该角色拥有的所有权限存入一个列表,当访问/user/add
接口时,只需要看权限列表是否有user:add权限即可。
说明
可以前往上面提到的GitHub中下载测试,本文也是参考该项目搭建的。
数据库
可点击下载:sql文件,权限相关只有4个表,大致说明下:
- sys_user:用户表,存储用户账号密码等信息,有对应的角色ID字段。
- sys_role:角色表,存储角色id和角色名称。
- sys_permission: 权限表,存储权限。
- sys_role_permission:角色权限表,用于关联角色和权限。
常规的RBAC最少需要5张表,这里简单起见设定为一个用户仅有一种权限,若要做多角色用户则需要额外新增一张用户 - 角色
关联表。
前端
可以通过数据库查询权限集合与菜单集合,返回给前端类似于这样的数据,前端可以根据menuList决定展示哪些菜单,根据permissionList控制按钮是否可操作。权限的格式为表:操作
,例如article:add
就代表拥有新增文章的权限。
"data":{
"menuList":[
"role",
"user",
"article"
],
"permissionList":[
"article:list",
"article:add",
"user:list",
]
}
后端
1、maven依赖
这里用到了一个shiro-redis工具:GitHub链接,有相关文档可以自己看看。其他还需要shiro依赖、web依赖和redis依赖。
<!-- shiro权限 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.6.0</version>
</dependency>
<!-- shiro的redis工具 -->
<dependency>
<groupId>org.crazycake</groupId>
<artifactId>shiro-redis</artifactId>
<version>3.2.3</version>
</dependency>
<!-- WEB支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Redis支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、yml配置
shiro这块可以完全在Configuration类里配置,所以yml里面主要是放redis的配置信息,这里正常配置redis参数。
spring:
redis:
database: 0
host: 127.0.0.1
port: 6379
password: # 密码(默认为空)
timeout: 6000 # 连接超时时长(毫秒)
jedis:
pool:
max-active: 1000 # 连接池最大连接数(使用负值表示没有限制)
max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 10 # 连接池中的最大空闲连接
min-idle: 5 # 连接池中的最小空闲连接
3、累了下次再写
本文由 visionki 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Mar 17, 2021 at 03:56 pm