我正在使用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.3I保护节点如下:
@PostFilter("hasPermission(filterObject, 'read')")
public List<A> getAll() {}这段代码保护第一级(Node-1、Node-2和Node-3)的节点。现在,我们希望在Node-1、Node-1.1和Node-1-2节点中获得用户的read访问权限。我们如何实现它?
发布于 2016-04-20 21:49:20
您可以使用ACL继承。您必须为每个孩子添加一个ObjectIdentity。请注意,acl_object_identity表具有parent_object和entries_inheriting属性。
如果你正在使用大型集合的应用程序级过滤,你应该考虑创建连接ACL实体的规范,这样你就可以利用数据库过滤来提高性能。
https://stackoverflow.com/questions/36745429
复制相似问题