数据权限用法二(未用查询过滤器) - xinwu-yang/cube-java GitHub Wiki

前言:现有的列表数据权限,需要在后端list请求中调用QueryGenerator.initQueryWrapper方法,否则配置权限无法生效,故而本章节讲述的是如何手工获取数据权限,不通过上述方法,而是自己在外部处理。

实现方案

将数据权限规则转化成SQL

// Controller代码
// 需要将前端将list请求地址改成此地址
@GetMapping("/sqlList")
@PermissionData("cube/CubeDemoList")
public Result<IPage<CubeDemo>> loadSqlPermissonList(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) {
	Result<IPage<CubeDemo>> result = new Result<>();
	IPage<CubeDemo> pageList = cubeDemoService.queryListWithPermission(pageSize, pageNo);
	result.setSuccess(true);
	result.setResult(pageList);
	return result;
}
// Service代码
public IPage<CubeDemo> queryListWithPermission(int pageSize, int pageNo) {
	Page<CubeDemo> page = new Page<>(pageNo, pageSize);
	// 就是调用这个QueryGenerator.installAuthJdbc方法获取权限sql
	String sql = QueryGenerator.installAuthJdbc(CubeDemo.class);
	return this.baseMapper.queryListWithPermission(page, sql);
}
// Mapper接口方法定义
IPage<CubeDemo> queryListWithPermission(Page<CubeDemo> page, @Param("permissionSql") String permissionSql);
<select id="queryListWithPermission" parameterType="Object" resultType="com.tievd.cube.modules.demo.entity.CubeDemo">
	select * from demo where 1=1 ${permissionSql}
</select>

使用MyBatis-Plus的QueryWrapper

// Contoller代码
// 需要将前端将List请求地址改成此地址
@GetMapping("/mpList")
@PermissionData("cube/CubeDemoList")
public Result<IPage<CubeDemo>> loadMpPermissonList(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) {
	// 此处使用的是QueryWrapper,如果你需要用LambdaQueryWrapper,请先new一个QueryWrapper
	// 接着加载数据权限,然后通过queryWrapper.lambda()将其转化成LambdaQueryWrapper
	// 最后你就能使用LambdaQueryWrapper处理自己的逻辑了
	QueryWrapper<CubeDemo> queryWrapper = new QueryWrapper<>();
	// 调用这个QueryGenerator.installAuthMplus方法加载数据权限
	QueryGenerator.installAuthMplus(queryWrapper, CubeDemo.class);
	Page<CubeDemo> page = new Page<>(pageNo, pageSize);
	IPage<CubeDemo> pageList = cubeDemoService.page(page, queryWrapper);
	return Result.ok(pageList);
}
⚠️ **GitHub.com Fallback** ⚠️