我现在考虑的太多了,没有明显正确的解决方案.它可能是一个真正的木树换树木的情况,所以我需要stackoverflow的帮助.
我正在尝试在区域基础上强制执行数据库过滤.我的系统有各种用户,每个用户都被分配到一个区域办事处.我只希望用户能够看到与其区域办事处相关的数据.
简单地说我的应用程序是:Java App - > JPA(hibernate) - > MySQL
数据库包含来自所有区域的对象,但我只希望用户能够操作来自其自己区域的对象.我已经考虑过以下几种方法:
1)修改所有数据库查询,以便他们从tablex中读取select*from region ="myregion".这很讨厌.它与JPA不兼容,例如entitymanager.find()方法只接受主键.当然,我可以去当地,但我只需要错过一个选择声明,我的安全性就会被拍摄
2)使用mysql代理过滤结果.有点时髦,但是mysql代理只是看到原始调用,并不真正知道它应该如何过滤它们(即发出此请求的用户属于哪个区域).好的,我可以为每个地区启动一个代理,但它开始变得有点凌乱..
3)为每个区域使用单独的模式.是的,简单,我使用spring,所以我可以使用RoutingDataSource通过正确的数据源(每个模式1个数据源)路由请求.当然,现在问题就在某个地方,我想要按区域和其他类别进行过滤.ohps.
4)ACL - 对此不太确定.如果a从tablex做了select*; 它会悄悄地过滤掉我无法访问的对象,还是会抛出一堆访问异常?
但我对此有太多考虑吗?这似乎是一个非常普遍的问题.必须有一些简单的解决方案,我太愚蠢了.我确信它会接近/或在数据库中,因为你想尽可能地过滤到源,但是什么?
不希望被勺子 - 任何链接,关键字,想法,商业/开源产品的建议将非常感谢!! 谢谢.