JPA - 提交前如何检查关系?

时间:2013-01-14 11:01:45

标签: hibernate java-ee jpa

假设我有复杂的用户管理系统。在这种情况下,用户可以与组相关联,组可以与角色相关。此外,组可以包含其他组。

我假设在“账户管理”的情况下,当前用户不能丢失允许进行“账户管理”处理的角色。我想知道如何实现该用例的最佳方式。

让我们考虑一下简单的场景: 例如。在下面的层次结构中,用户通过组G3和G5与我们的角色连接。

---USER---
|        |
G1       G3----
|        |    |
G2       G5   G6
         |
   REQUIRED_ROLE

在G3群组版本中,有人尝试更改G3群组成员,例如到G7(为了简化角色)

---USER---
|        |
G1       G3----
|        |    |
G2       G7   G6

提交该更改将从用户hiererchy中删除“帐户管理”角色,用户将无法编辑帐户。

我唯一的想法是将所有组和角色读入内存并尝试手动更改所有依赖项以检查在提交后是否仍将分配角色。但是,该解决方案可能是未来潜在漏洞的来源,并不优雅。 有谁知道如何以优雅的方式解决它?

1 个答案:

答案 0 :(得分:0)

因为这是一个非常重要的用例,所以不能使用常规完整性约束。您必须执行预提交触发器以扫描层次结构并确定用户具有所需的权限。如果没有,请抛出异常。