编码对接数据权限(未用查询过滤器)
最后更新于:2022-04-02 07:16:08
### 手工集成数据权限规则(未用查询过滤器)
> 前言:现有的列表数据权限,需要在后端list请求中调用QueryGenerator.initQueryWrapper方法,否则配置权限无法生效,故而本章节讲述的是如何手工获取数据权限,不通过上述方法,而是自己在外部处理。
准备案例:(`权限配置细节不作赘述,请查看相关文档`)
* 查看菜单 常见案例-->单表模型示例 ,没有权限时,数据如下:
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/e1/19/e1191b1580da6e61bc8a6dedfdfbfc6a_1583x714.png)
* 配置一个数据权限规则如下图,并且授权
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/91/89/9189cb4ed8bda1ac00650d6a469c390a_781x375.png)
* 则过滤后的数据如下:
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/a3/52/a3522eda49a8359b7dbcab3650f25343_1587x655.png)
实现方案:
1.将数据权限规则转化成sql,程序拿到这个sql,可以拼接在mybatis的xml中
```
// controller代码
// 需要将前端将list请求地址改成此地址
@GetMapping(value = "/sqlList")
@PermissionData(pageComponent="jeecg/JeecgDemoList")
public Result> loadSqlPermissonList(JeecgDemo jeecgDemo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
Result> result = new Result>();
IPage pageList = jeecgDemoService.queryListWithPermission(pageSize, pageNo);
result.setSuccess(true);
result.setResult(pageList);
return result;
}
//service代码
public IPage queryListWithPermission(int pageSize,int pageNo) {
Page page = new Page<>(pageNo, pageSize);
//就是调用这个QueryGenerator.installAuthJdbc方法获取权限sql
String sql = QueryGenerator.installAuthJdbc(JeecgDemo.class);
return this.baseMapper.queryListWithPermission(page, sql);
}
//mapper接口方法定义
IPage queryListWithPermission(Page page,@Param("permissionSql")String permissionSql);
//xml代码
```
2.还是使用mybatisplus ,在外部自己往queryWrapper 里面设置,
```
//contoller代码
// 需要将前端将list请求地址改成此地址
@GetMapping(value = "/mpList")
@PermissionData(pageComponent="jeecg/JeecgDemoList")
public Result> loadMpPermissonList(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
Result> result = new Result>();
//此处使用的是QueryWrapper,如果你需要用LambdaQueryWrapper,请先new一个QueryWrapper,接着加载数据权限,然后通过queryWrapper.lambda()将其转化成LambdaQueryWrapper,最后你就能使用LambdaQueryWrapper处理自己的逻辑了
QueryWrapper queryWrapper = new QueryWrapper();
//调用这个QueryGenerator.installAuthMplus方法加载数据权限
QueryGenerator.installAuthMplus(queryWrapper, JeecgDemo.class);
Page page = new Page(pageNo, pageSize);
IPage pageList = jeecgDemoService.page(page, queryWrapper);
result.setSuccess(true);
result.setResult(pageList);
return result;
}
```
';