1
我正在開發一個使用spring 4.0.6和Hibernate 4.2.21的應用程序。我有一個實體如下:如何使用Spring Security ACL實現樹節點?
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
& Node-3
)。現在我們要獲得一個用戶read
acccess在Node-1
,Node-1.1
& Node-1-2
節點。我們如何實現它?
我將所有節點添加到acl表中,但什麼是'parent_object'和'entries_inheriting'角色? –
'parent_object'是所有第二級節點的第一級節點的ID,如果您希望它們具有與父級相同的權限,則'entries_inheriting'必須設置爲true。對於第三級節點,您必須指定從中繼承的第二級節點的ID。 – NikolaB
當您使用'@PostFilter(「hasPermission(filterObject,'read')」)'時,Acl只檢查第一級節點,並且它不適用於子節點。在'getNodes'方法的實體類中定義'@PostFilter(「hasPermission(filterObject,'read')」)'是個好主意嗎? –