springblade数据权限
阅读数:515 评论数: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()")