springblade数据权限

阅读数:448 评论数: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()")



相关推荐

SpringBlade对SpringCloud做了封装。 SpringBlade ├── blade-auth --

一、主要特性 1、采用前后端分离的模式,前端开源两个框架Sword(基于React、Ant Design)、Saber(基于Vue、Element-UI)。 2、

/** * 统一API响应结果封装 * * @author Chill */ @Getter @Setter @ToStrin

1、建表 2、创建实体类 @Data @TableName("blade_blog") public

@RestController @RequestMapping("api") public class DemoController

1、单条数据 /** * 详情 */ @GetMapping("/detail") public R&lt;Blog

1、需要数据隔离的业务表,新建一个字段,tenant_id。 2、实体类无需将这个字段写入,因为框架底层会自动对tenant_id进行处理。 3、在对应的applic

1、密码模式 密码模式主要针对可信应用。 /blade-auth/oauth/token <code