我正在使用spring 4.0.6和Hibernate 4.2.21开发一个应用程序。我有一个实体如下:
public class A {
@OneToMany(mappedBy="parent", fetch = FetchType.LAZY)
private Set<A> children = new HashSet<A>(0);
@ManyToOne(fetch = FetchType.EAGER)
private A parent;
/*
*
* Getters And Setters
*/
}
换句话说,A
实体是一棵树。现在我想保护树的所有节点。考虑以下树:
Node-1
Node-1.1
Node-1.1.1
Node-1.1.2
Node-1.2
Node-1.3
Node-2
Node-3
Node-3.1
Node-3.2
Node-3.3
我保护节点如下:
@PostFilter("hasPermission(filterObject, 'read')")
public List<A> getAll() {}
此代码保护第一级(Node-1
,Node-2
&amp; Node-3
)中的节点。现在,我们想要在read
,Node-1
&amp;和Node-1.1
中获得用户Node-1-2
。 li {
display: inline;
padding: 10px;
font-family: Arial;
font-size: 15px;
line-height: 32px;
}
个节点。我们如何实现它?
答案 0 :(得分:0)
您可以使用ACL继承。您必须为每个孩子添加ObjectIdentity
。请注意,acl_object_identity
表格具有parent_object
和entries_inheriting
属性。
不相关,如果您正在使用大型集合的应用程序级别过滤,则应考虑创建与ACL实体连接的规范,以便您可以利用数据库过滤来提高性能。