如何使用Spring Security ACL实现树节点?

时间:2016-04-20 13:30:15

标签: spring spring-security spring-security-acl

我正在使用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-1Node-2&amp; Node-3)中的节点。现在,我们想要在readNode-1&amp;和Node-1.1中获得用户Node-1-2li { display: inline; padding: 10px; font-family: Arial; font-size: 15px; line-height: 32px; }个节点。我们如何实现它?

1 个答案:

答案 0 :(得分:0)

您可以使用ACL继承。您必须为每个孩子添加ObjectIdentity。请注意,acl_object_identity表格具有parent_objectentries_inheriting属性。

不相关,如果您正在使用大型集合的应用程序级别过滤,则应考虑创建与ACL实体连接的规范,以便您可以利用数据库过滤来提高性能。