springblade数据权限

阅读数:6 评论数:0

跳转到新版页面

分类

python/Java

正文

简介

权限模块从大的方面来说,可以分为三种大的类型:功能权限、接口权限、数据权限。

1、功能权限

也就是我们熟悉的菜单、按钮权限。可以配置各个角色能看到 菜单、按钮。

2、接口权限

有些敏感的接口,是只能有固定的一些角色才能调用,普通角色是不能调用的。

3、数据权限

需要控制不能的角色、机构人员有查看不同数据范围的权限。

BladeX的解决方案

1、纯注解配置

指不通过数据库,我们只需要关注column、type、value这三个字段。

(1)column:需要过滤的数据库字段

(2)type:数据权限过滤的类型

(3)value:当数据权限类型为自定义的时候,配置的sql条件语句

// 所在机构可见
@DataAuth(type=DataScopeEnum.OWN_DEPT)
List<NoticeVO> selectNoticePage(IPage page,NoticeVO notice);

因为默认字段就是create_dept,所以无需配置column。

@DataAuth(type=DataScopeEnum.CUSTOM, value="where scope.create_user=${userId} or scope.create_dept in (${deptId})")
List<NoticeVO> selectNoticePage(IPage page,NoticeVO notice);

占位符${userId},这些参数可以参考BladeUser类。

2、web全自动配置

(1)打开saber,进入"数据权限",点击某个模块的“数据权限”按钮。

这里注意,在哪个模块上新增权限,只是起一个分组管理的作用。

(2)新增

这里有一点注意的是“权限类名”字段,之所以可以实现自动配置,就是因为我们指定了Mapper层的对应的方法。如果分页、列表等方法不是自已写的mapper,而是采用的mybatis-plus自动生成的方法,没有自定义的方法名,可以配置为自动生成的mapper方法(自己跟踪代码查看具体是哪个)。

(3)角色分配数据权限

打开“角色管理”-》“权限配置”

3、半自动配置

一个方法对应一个或多个规则(多个取第一个配置),那如果有一个规则的使用频率非常高,想简单配置下就用在对应的各个方法,就可以使用半自动配置。

@DataAuth(code="notic")
List<NoticeVO> selectNoticePageTest(IPage page,NoticeVO notice);

code属性值以应“权限编号”。

另外需要确保方法不会被动态扫描到。

4、注意点

(1)动态数据权限采用了redis缓存。

(2)为了进一步提升性能,BladeX在动态数据权限部分只扫描了包含Page、List的mapper方法,如果有其他的方法需要匹配,按如下配置

接口权限

1、通过@PreAuth

@PreAuth("hasRole('user')")
@PreAuth("hasAnyRole('user','administrator')")

2、web动态配置

(1)“接口权限”-》“权限配置”

(2)新增

(3)为角色分配接口权限

(4)后端加注解

@PreAuth("hasPermission('desk:notice:page')")

3、全局配置

@PreAuth("permissinAll()")