在网上搜索了很多资料也没发现特别有用的,MybatisPlus 有一个数据权限插件 一键启用 再配置一个 SQL 拼接器就可以了,感觉还是比较方便,jpa 这边没发现有对应的东西,听说老外用 jpa 用的比较多 为什么没有看到相关的讨论了,搜索了一下都是很多年前的回答了,有说用数据库的 ACL 原生实现的,这是主流做法吗?
|      1nothingistrue      2024-06-11 10:38:52 +08:00 那是业务逻辑层/领域模型/数据模型/真模型层的活,不是仅作为基础设施的 SpringDataJpa 该管的事。 | 
|      2129duckflew OP @nothingistrue Mybatis Plus 有一个数据权限插件 https://baomidou.com/plugins/data-permission/ ,如果希望用 Jpa 这个技术来实现类似的效果 可以从哪些角度考虑呢? | 
|      3nothingistrue      2024-06-11 10:41:29 +08:00 用 SQL ,或者数据查询去控制权限,老外,最起码也是近些年还能够宣传到中国的老外,是不会这么干的。 | 
|      4129duckflew OP @nothingistrue 那老外不会有类似的多租户或者数据权限的需求吗,他们一般用什么解决方案呢? | 
|      5lybcyd      2024-06-11 11:02:05 +08:00 数据权限属于鉴权,和数据访问层的实现应该是无关的。最好是单独实现一个 interceptor 或者切面,然后通过自定义注解之类的方式来实现。 | 
|      6KongLiu      2024-06-11 12:15:41 +08:00 这种是权限问题了把,一般都是用拦截器做,怎么也轮不到一个 ORM 去做 | 
|  |      7rockddd      2024-06-11 13:02:21 +08:00 Mybatis Plus 的插件也是 Interceptor ,你可能是想问问 jpa 那边有没有人做 JPA Plus ? | 
|  |      8yidinghe      2024-06-11 13:12:10 +08:00 没有通用的需求就没有通用的解决方案。比如说查订单,订单都在一张表里,而每个用户只能查自己的订单,这算不算行级权限控制?当然算。凡是有订单的系统,自然而然就把这个作为业务需求给实现了。 | 
|  |      9zjsxwc      2024-06-11 13:34:26 +08:00 这权限问题,不单单,你 sql 层能解决。 业务逻辑层能解决(面向切面编程、中间件拦截处理)、 数据传输序列化层能解决( serializer 、dto )、 甚至页面展示渲染层也能解决 这么多途径方式,没必要纠结于拦截 sql 拼接来解决 | 
|      10129duckflew OP | 
|      11chuck1in      2024-06-11 15:37:59 +08:00 op 公司用的 jpa 吗,挺少见的。 | 
|  |      12RandomJoke      2024-06-11 17:05:38 +08:00 你要的可是 https://www.baeldung.com/hibernate-interceptor 这玩意?其实吧我感觉作用不大..原本好好的 ORM ,鬼知道一通操作把 SQL 改成啥样 | 
|  |      13Ethan9527      2024-06-11 22:54:06 +08:00 之前用 Querydsl 做过,跟你说的这个数据权限插件思路差不多,拦截到权限数据之后动态增加过滤条件 |