2010-02-19 3 views
0

Je crée une application Web dans laquelle je souhaite que les utilisateurs disposent d'autorisations spécifiques pour effectuer une action spécifique. Je ne souhaite pas utiliser les autorisations par défaut et les fournisseurs de rôles dans ASP.NET.Autorisations personnalisées C#/ASP.NET pour effectuer une action spécifique

Je pensais avoir chaque utilisateur associé à un rôle. Chaque rôle est mappé à un ensemble d'autorisations (CreatePost, ReadPost, UpdatePost, DeletePost et ainsi de suite).

J'ai quelques questions à ce sujet. Serait-il préférable d'avoir une propriété booléenne pour chaque autorisation sur le rôle ou une sorte de champ de bits? J'aime l'idée d'avoir des méthodes pour cela mais correctement besoin de les mapper aux autorisations stockées pour le rôle dans la base de données.

De même, comment est-ce que je mettrais en œuvre ceci pour chaque action/demande? Je pense quelque chose dans le sens de ce qui a été posté here mais je ne suis pas vraiment sûr.

Merci!

+0

@TheCloudlessSky: Pourquoi ne voulez-vous pas utiliser le fournisseur de rôle pour faire cela? Quel besoin avez-vous avec lequel il est en conflit? – casperOne

+0

@casperOne: C'est une application d'entreprise à très grande échelle que je ne veux pas vraiment remplacer les méthodes et avoir lancé NotImplementedException ... ce n'est pas très agréable à mon avis. Je veux vraiment une solution personnalisée afin que nous ayons un contrôle complet sur tout. – TheCloudlessSky

+0

Le fait qu'il s'agit d'une application à grande échelle est vraiment un faux-fuyant, il n'est pas pertinent de savoir pourquoi on utiliserait ou non le RoleProvider. En outre, il est plus facile d'effectuer le codage à l'avance pour le RoleProvider * now * personnalisé que de devoir parsemer les appels de méthode * partout * dans votre code que vous voulez sécuriser (par opposition à l'ajout d'un attribut). Surtout pour une application à grande échelle, il est auto-destructeur de ** pas ** aller de cette façon. – casperOne

Répondre

0

Créez votre propre fournisseur de rôle et enregistrez-le dans le fichier web.config. Regardez le MSDN pour un échantillon. Une fois enregistré, il associera les rôles que vous fournissez au mandant.

Je viens de le faire pour l'un de mes projets et ça marche très bien.

Pour vérifier si l'utilisateur est autorisé à exécuter une tâche, vous devez vérifier si l'utilisateur a le rôle requis. Dans "normal" ASP.NET, vous devrez le faire dans le code. Dans MVC, vous pouvez le faire avec des attributs sur chaque classe/méthode dans le contrôleur.

+0

"Dans 'ASP.NET" normal, vous devrez le faire dans le code. " - ce n'est pas vrai. Jetez un coup d'œil à PrincipalPermissionAttribute (http://msdn.microsoft.com/fr-fr/library/system.security.permissions.principalpermissionattribute.aspx) Le fournisseur d'API Membership par défaut se connecte à CAS, et votre fournisseur personnalisé peut le faire. – Nathan

+0

Le plus gros problème avec l'utilisation des fournisseurs ASP.NET est que vous devez remplacer un grand nombre de membres. Aussi, si je n'utilise pas une méthode spécifique, je dois lancer une NotImplementedException() qui n'est pas très agréable à mon avis. Comment utiliser les attributs personnalisés et avoir ma propre implémentation de rôle sans utiliser le fournisseur de rôles? – TheCloudlessSky

+0

Vrai, dans la plupart des cas (fournisseurs d'appartenance et de profil), l'implémentation est jonchée de NotImplementedExceptions.Cependant, le RoleProvider n'a pas autant de méthodes et donc seules les méthodes qui cereate, suppriment et changent les rôles renvoient NotImplementedExceptions, ce qui, à mon humble avis, le rend utile. Le problème est que si vous n'utilisez pas le RoleProvider, il est assez difficile d'attacher les rôles au pricipal créé par l'authentification d'ASP.NET. – AxelEckenberger

Questions connexes