Bonjour à tous

Une fois n'est pas coutume, c'est moi qui poste pour obtenir de l'aide, enfin surtout des conseils.

Voici mon objectif : implémenter une gestion de privilèges assez fine dans un site ASP.NET.

Attention, il n'est pas simplement question de configuration d'un Membership/Role provider et du web.config pour gérer l'accès à des pages web. Cela va plus loin.

En effet, je part du principe qu'au minimum un utilisateur peut avoir 4 privilèges :
- Lire/Visualiser
- Créer
- Editer/Modifier
- Supprimer

Mais à ces privilèges basiques viennent s'ajouter d'autres privilèges plus pointus. Par exemple un utilisateur pourrait avoir le droit de Modifier sans pour autant pouvoir tout modifier non plus.

Prenons un exemple : une fiche client. Parmi les actions possibles on a bien Visualiser, Créer, Modifier, Supprimer. On a aussi : Résiliser, Bloquer/Débloquer, Relancer, etc... Ces trois dernières actions prennent la forme de boutons sur la fiche. On peut donc tout à fait avoir une situation où un utilisateur peut Visualiser une fiche et Bloquer/Débloquer le client.

La problématique d'implémentation est : comment le faire efficacement ?

Actuellement je m'oriente vers une gestion relativement naïve, du genre : dans le Page_Load je récupère les privilèges de l'utilisateur et, en fonction de ceux-ci, je rend Disponible/Visible les boutons. J'ai donc du code du genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
btLock.Enabled = RightProvider.IsEnabled("Member.Lock") ou 
btLock.Visible = RightProvider.IsVisible("Member.Lock")
Ainsi pour l'utilisateur connecté et l'identifiant d'action (en l'occurence "Member.Lock") le système va retourner un booléen.

Ce système fonctionne très bien mais j'ai l'impression que cela alourdit énormément le code. D'où mes questions :
  • est-ce là une bonne technique d'implémentation ?
  • y a-t-il une technique plus adéquate ?
  • existe-t-il quelque chose de déjà tout fait en ASP.NET ?


J'ai cherché sur ce forum des conseils répondant à ma problématique sans succès pertinent.

Merci pour vos conseils

Cordialement