我目前已经实现了行级安全性,其中需要安全的表具有所有者,组和Unix样式权限的列。
目前正在发生的是每次我们通过休眠请求实体时,我们都会添加一个自定义标准来验证用户是否可以访问数据。此自定义条件也会添加到每个create.Alias()上,以确保与其他表的联系也是安全的。
问题是我们的模型有多个具有@manyToOne关系的实体,并且由于这些实体是自动获取的,因此无法保护嵌套实体。
我正在寻找的方法是:
设置为只提取通过create.Alias()添加的实体
或者
这些似乎是两种不会暗示巨大代码重构的方式 我们的项目。
这是可以完成的事情还是有其他方法来强制执行我们的安全性?
P.S:遗憾的是,永远不会返回嵌套实体,因为它需要客户端。我们也尝试使用max_fetch_depth 0,但即使在我们的初始查询中没有请求嵌套实体,hibernate似乎也会进行多个后续查询来完成实体。
答案 0 :(得分:1)
我在研究但未使用过的阶段基本上是为了我自己的项目,我相信filters就是你想要的。如果我正确理解文档,您可以定义一个过滤器以及您的模式,启用它并在打开会话时以编程方式为其提供参数,并且在会话期间,Hibernate会假装不对齐的对象通过过滤器不存在。除了保护基于关系的提取之外,这还将消除为每个查询手动添加安全检查的需要。