Je développe une application en utilisant spring 4.0.6 et Hibernate 4.2.21. J'ai une entité comme suit:Comment implémenter des nœuds d'arbre en utilisant 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
*/
}
En d'autres termes, l'entité A
est un arbre. Maintenant, je veux sécuriser tous les nœuds de l'arbre. Considérez l'arbre suivant:
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
je sécuriser le noeud comme suit:
@PostFilter("hasPermission(filterObject, 'read')")
public List<A> getAll() {}
Ce code des nœuds sûrs en premier niveau (Node-1
, Node-2
& Node-3
). Maintenant, nous voulons obtenir un utilisateur read
acccess dans Node-1
, Node-1.1
& Node-1-2
nœuds. Comment l'implémentons-nous?
J'ajoute tous les nœuds aux tables acl, Mais qu'est-ce que les rôles 'parent_object' et' entries_inheriting'? –
'parent_object' est l'ID du noeud de premier niveau pour tous les nœuds de second niveau et' entries_inheriting' doit être défini sur true si vous voulez qu'ils aient les mêmes permissions que le parent. Pour les nœuds de troisième niveau, vous devez spécifier l'ID du nœud de second niveau dont ils héritent. – NikolaB
Lorsque vous utilisez '@PostFilter (" hasPermission ("filterObject, 'read')") ', Acl ne vérifie que les nœuds de premier niveau et ne fonctionne pas avec child. Est-ce une bonne idée de définir '@PostFilter (" hasPermission (filterObject, 'read') ")' à la classe d'entité pour la méthode 'getNodes'? –