-
Gestion de droits
Bonjour a tous
Voila j'utilise Spring security / LDAP pour la gestion de l'authentification et des autorisations d'accès à mon application web. Tout se passe bien concernant l'authentification (j'utilise les exemples fournis sur le site officiel donc ça roule).
Je m'authentifie, je récupère mon contexte avec login, password, role (ROLE_USER ou ROLE_ADMIN suivant l'utilisateur). Tout ça issu de mon annuaire LDAP.
Mon souci est que je voudrais une gestion bien plus fine des droits. Par exemple, dans mon appli un user peut avoir le droit de modifier un element X. Quelle est la marche à suivre pour pouvoir indiquer à ma méthode java qu'il a bien l'autorisation de faire ceci (car il possède bien le droit dans l'annuaire LDAP)? UserDetails peut-il m'etre utile ?
-
Tu peux utiliser l'annotation @Secured({"ROLE_USER"}) sur une interface, une classe, une méthode pour indiquer à Spring quel niveau d'accès est nécessaire.
Pour activer les annotations de ce type tu dois l'indiquer dans ton fichier de configuration :
Code:
<global-method-security secured-annotations="enabled" />
Par contre c'est toujours en fonction d'un rôle, je sais pas si c'est possible en fonction d'autre chose.
-
Ok Mr Vincent, merci pour ta reponse. C'est bien ce qu'il me semblait.
Cette annotation s'applique bien sur un role (un groupe d'utilisateurs qui ont les mêmes droits finalement) mais ce que j'aurai voulu faire était de l'appliquer en fonction du fait que l'utilisateur ait un droit qui l'y autorise ou non ... et je me demande bien si spring security permet ce genre de chose avec LDAP.
En gros, dire a Spring security "pour l'utilisateur du contexte en cours, vérifier s'il a un certain droit et si oui, executer la methode".
-
Salut,
Ce que tu décris est parfaitement faisable via un voter + la notion de grants.
Un voter intercepte l'appel des méthode sécurisées en prenant en pramètre l'utilsiateur connecté, les grants dont il dipose et la méthode + arguments qui sera invoquée. A partir de là, tu décide si oui ou non (ou si t'abstiens) ce tratement peut procéder.
Après, pour ton cas (LDAP), je sais pas comment ça passe la création de l'objet UserDetails car c'est cet objet qui doit contenir les grants de l'utilsiateur.