V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
129duckflew
V2EX  ›  Java

SpringDataJpa 如何实现行级数据权限控制?

  •  
  •   129duckflew · Jun 11, 2024 · 4111 views
    This topic created in 691 days ago, the information mentioned may be changed or developed.

    在网上搜索了很多资料也没发现特别有用的,MybatisPlus 有一个数据权限插件 一键启用 再配置一个 SQL 拼接器就可以了,感觉还是比较方便,jpa 这边没发现有对应的东西,听说老外用 jpa 用的比较多 为什么没有看到相关的讨论了,搜索了一下都是很多年前的回答了,有说用数据库的 ACL 原生实现的,这是主流做法吗?

    13 replies    2024-06-11 22:54:06 +08:00
    nothingistrue
        1
    nothingistrue  
       Jun 11, 2024
    那是业务逻辑层/领域模型/数据模型/真模型层的活,不是仅作为基础设施的 SpringDataJpa 该管的事。
    129duckflew
        2
    129duckflew  
    OP
       Jun 11, 2024
    @nothingistrue Mybatis Plus 有一个数据权限插件 https://baomidou.com/plugins/data-permission/ ,如果希望用 Jpa 这个技术来实现类似的效果 可以从哪些角度考虑呢?
    nothingistrue
        3
    nothingistrue  
       Jun 11, 2024
    用 SQL ,或者数据查询去控制权限,老外,最起码也是近些年还能够宣传到中国的老外,是不会这么干的。
    129duckflew
        4
    129duckflew  
    OP
       Jun 11, 2024
    @nothingistrue 那老外不会有类似的多租户或者数据权限的需求吗,他们一般用什么解决方案呢?
    lybcyd
        5
    lybcyd  
       Jun 11, 2024
    数据权限属于鉴权,和数据访问层的实现应该是无关的。最好是单独实现一个 interceptor 或者切面,然后通过自定义注解之类的方式来实现。
    KongLiu
        6
    KongLiu  
       Jun 11, 2024
    这种是权限问题了把,一般都是用拦截器做,怎么也轮不到一个 ORM 去做
    rockddd
        7
    rockddd  
       Jun 11, 2024
    Mybatis Plus 的插件也是 Interceptor ,你可能是想问问 jpa 那边有没有人做 JPA Plus ?
    yidinghe
        8
    yidinghe  
       Jun 11, 2024
    没有通用的需求就没有通用的解决方案。比如说查订单,订单都在一张表里,而每个用户只能查自己的订单,这算不算行级权限控制?当然算。凡是有订单的系统,自然而然就把这个作为业务需求给实现了。
    zjsxwc
        9
    zjsxwc  
       Jun 11, 2024
    这权限问题,不单单,你 sql 层能解决。

    业务逻辑层能解决(面向切面编程、中间件拦截处理)、
    数据传输序列化层能解决( serializer 、dto )、
    甚至页面展示渲染层也能解决

    这么多途径方式,没必要纠结于拦截 sql 拼接来解决
    129duckflew
        10
    129duckflew  
    OP
       Jun 11, 2024
    @zjsxwc 是这样,不过拼接 SQL 从性能角度来说是比较好的,这是我比较执着于拼接 SQL 的原因,例如我可以实现一个注解假设是 @DP 在 Dao 或者 Repo 层面的特定方法上面加 ,然后用 AOP 拦截 @DP 注解的方法的 Result ,过滤掉其中特定的结果,但这样的前提是我每次都需要查询出全量的未进行权限过滤之前的结果,另外 在分页的时候 这种情况下在会在内存当中 进行分页,涉及到分页,麻烦的事情也就更多了
    chuck1in
        11
    chuck1in  
       Jun 11, 2024
    op 公司用的 jpa 吗,挺少见的。
    RandomJoke
        12
    RandomJoke  
       Jun 11, 2024
    你要的可是 https://www.baeldung.com/hibernate-interceptor 这玩意?其实吧我感觉作用不大..原本好好的 ORM ,鬼知道一通操作把 SQL 改成啥样
    Ethan9527
        13
    Ethan9527  
       Jun 11, 2024
    之前用 Querydsl 做过,跟你说的这个数据权限插件思路差不多,拦截到权限数据之后动态增加过滤条件
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2401 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 67ms · UTC 10:16 · PVG 18:16 · LAX 03:16 · JFK 06:16
    ♥ Do have faith in what you're doing.