返回介绍

159.编码对接数据权限-未用查询过滤器

发布于 2020-09-14 22:20:39 字数 6201 浏览 1112 评论 0 收藏 0

手工集成数据权限规则(未用查询过滤器)

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

准备案例:(权限配置细节不作赘述,请查看相关文档)

  • 查看菜单 常见案例-->单表模型示例 ,没有权限时,数据如下:
  • 配置一个数据权限规则如下图,并且授权
  • 则过滤后的数据如下:

实现方案: 1.将数据权限规则转化成sql,程序拿到这个sql,可以拼接在mybatis的xml中

    // controller代码
    // 需要将前端将list请求地址改成此地址
    @GetMapping(value = "/sqlList")
    @PermissionData(pageComponent="jeecg/JeecgDemoList")
    public Result<IPage<JeecgDemo>> loadSqlPermissonList(JeecgDemo jeecgDemo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
            HttpServletRequest req) {
        Result<IPage<JeecgDemo>> result = new Result<IPage<JeecgDemo>>();
        IPage<JeecgDemo> pageList = jeecgDemoService.queryListWithPermission(pageSize, pageNo);
        result.setSuccess(true);
        result.setResult(pageList);
        return result;
    }

//service代码
public IPage<JeecgDemo> queryListWithPermission(int pageSize,int pageNo) {
        Page<JeecgDemo> page = new Page<>(pageNo, pageSize);
        //就是调用这个QueryGenerator.installAuthJdbc方法获取权限sql
        String sql = QueryGenerator.installAuthJdbc(JeecgDemo.class);
        return this.baseMapper.queryListWithPermission(page, sql);
    }

//mapper接口方法定义
IPage<JeecgDemo> queryListWithPermission(Page<JeecgDemo> page,@Param("permissionSql")String permissionSql);

//xml代码
    <select id="queryListWithPermission" parameterType="Object" resultType="org.jeecg.modules.demo.test.entity.JeecgDemo">
        select * from demo where 1=1 ${permissionSql}
    </select>

2.还是使用mybatisplus ,在外部自己往queryWrapper 里面设置,

    //contoller代码
    // 需要将前端将list请求地址改成此地址
    @GetMapping(value = "/mpList")
    @PermissionData(pageComponent="jeecg/JeecgDemoList")
    public Result<IPage<JeecgDemo>> loadMpPermissonList(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
            HttpServletRequest req) {
        Result<IPage<JeecgDemo>> result = new Result<IPage<JeecgDemo>>();

        //此处使用的是QueryWrapper,如果你需要用LambdaQueryWrapper,请先new一个QueryWrapper,接着加载数据权限,然后通过queryWrapper.lambda()将其转化成LambdaQueryWrapper,最后你就能使用LambdaQueryWrapper处理自己的逻辑了
        QueryWrapper<JeecgDemo> queryWrapper = new QueryWrapper<JeecgDemo>();
        //调用这个QueryGenerator.installAuthMplus方法加载数据权限
        QueryGenerator.installAuthMplus(queryWrapper, JeecgDemo.class);
        Page<JeecgDemo> page = new Page<JeecgDemo>(pageNo, pageSize);

        IPage<JeecgDemo> pageList = jeecgDemoService.page(page, queryWrapper);
        result.setSuccess(true);
        result.setResult(pageList);
        return result;
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文