ASP.NET MVC Formes d'Authentification + Autoriser Attribut + Simple Rôles
Je suis en train d'ajouter simple d'Authentification et d'Autorisation pour un ASP.NET application MVC.
Je suis juste en train de virer de bord sur certaines des fonctionnalités ajoutées à la base de l'Authentification de Formulaires (en raison de la simplicité et de la coutume structure de base de données)
En supposant que c'est ma structure de base de données:
Utilisateur:
nom d'utilisateur
mot de passe
rôle (idéalement, certains enum. Des chaînes en cas de besoin. Actuellement, l'utilisateur n'a qu'UN seul rôle, mais cela peut changer)
Niveau Élevé Problème:
C'est ainsi que la structure de base de données, je voudrais être en mesure de faire ce qui suit:
- Simple Connexion utilisant l'Authentification par Formulaires
- Décorer mes actions avec:
[Autoriser(Rôles={ MyRoles.Admin, MyRoles.Membre})] - Utilisez les rôles de mon point de Vue (à déterminer les liens à afficher dans certains partiels)
Actuellement, tout ce que je suis vraiment sûr, c'est comment Authentifier. Après que je suis perdu. Je ne suis pas sûr à quel point dois-je saisir le rôle de l'utilisateur (login, chaque autorisation?). Depuis mes rôles ne peuvent pas être des chaînes de caractères, je ne suis pas sûr de savoir comment ils s'intégreront à l'Utilisateur.IsInRole().
Maintenant, je pose la question ici car je n'ai pas trouvé un "simple" accomplir ce dont j'ai besoin. J'ai vu plusieurs exemples.
Pour L'Authentification:
- Nous avons simple validation de l'utilisateur qui consulte la base de données et "SetAuthCookie"
- Ou nous remplacer le fournisseur d'appartenances et de le faire à l'intérieur de ValidateUser
Dans l'un ou l'autre, je ne suis pas sûr de la façon de virer de bord sur mon simple des Rôles d'utilisateur, de sorte qu'ils travaillent avec l':
HttpContext.Actuel.De l'utilisateur.IsInRole("L'Administrateur")
En outre, je ne suis pas sûr de savoir comment le modifier pour travailler avec mes valeurs enum.
Pour l'Autorisation, j'ai vu:
- Découlant AuthorizeAttribute et la mise en œuvre de AuthorizeCore OU OnAuthorization pour gérer les rôles?
- La Mise En Œuvre De IPrincipal?
Toute aide serait grandement appréciée. Cependant, j'ai peur de besoin de beaucoup de détails, parce que rien de ce que j'ai Googlé semble correspondre avec ce que je dois faire.
Vous devez vous connecter pour publier un commentaire.
Construire une coutume
AuthorizeAttribute
qui peuvent utiliser votre enums plutôt que des chaînes de caractères. Lorsque vous avez besoin d'autoriser, de convertir les énumérations dans les chaînes en ajoutant le type enum nom + la valeur d'énumération et de l'utilisation de laIsInRole
à partir de là.Pour ajouter des rôles à un utilisateur autorisé, vous devrez joindre à la
HttpApplication
AuthenticateRequest
événement quelque chose comme le premier code en http://www.eggheadcafe.com/articles/20020906.asp ( mais d'inverser la massivement instructions if imbriquées dans la garde des clauses!).Vous pouvez aller-retour, les utilisateurs des rôles dans les formes auth cookies ou de les saisir à partir de la base de données à chaque fois.
public static class MyRoles { public const string Viewer = "Viewer"; ..etc.. }
. Ensuite, vous pouvez ajouter des méthodes comme GetAll(), GetDefault() et appelez le rôle comme[Authorize(Roles=MyRoles.Viewer)]
.Je pense que j'ai mis en place quelque chose de similaire.
Ma solution, basée sur NerdDinner tutoriel, est la suivante.
Lorsque vous vous connectez à l'utilisateur dans, ajoutez le code comme ceci:
Ajoutez le code suivant à
Global.asax.cs
:Après vous avez fait cela, vous pouvez utilisation
[Autoriser]
attribut dans votre contrôleur de code action:S'il vous plaît laissez-moi savoir si vous avez d'autres questions.
<appSettings> <add key="enableSimpleMembership" value="false" /> </appSettings>
dans le Web.config.User.IsAuthenticated
retourne toujoursfalse
. Serais-je capable de vérifierUser.IsInRole
ainsi (après je vais trier mes question)?J'ai fait quelque chose comme ceci:
Affectez l'attribut [Authorize] aux contrôleurs, vous voulez avoir besoin d'autorisation pour
ou de permettre l'accès, par exemple le Login et le ValidateUser utilisation de contrôleurs de la ci-dessous attribut
Mon Formulaire De Connexion
De connexion du Contrôleur et ValidateUser contrôleur invoqué à partir du post de Formulaire
Validation de l'utilisateur est d'authentification via un service WCF qui valide à l'encontre de la Windows AD Contexte local pour le service, mais vous pouvez le modifier pour votre propre mécanisme d'authentification
}
Utilisateur est authentifié maintenant créer la nouvelle Identité
Sur mon site au sommet de ma _Layout.cshtml j'ai quelque chose comme ce
Puis dans le corps
Ajouter à vos utilisateurs de la table "utilisateurs dans des rôles". Utilisez la procédure stockée "addusertorole" (quelque chose comme ça) dans votre code à ajouter à leurs différents rôles. Vous pouvez créer des rôles très simplement dans les "rôles" de la table.
Vos tables à l'utilisation: l'Utilisateur, UsersInRole, les Rôles
Utiliser le construit en Stockées Procs pour manipuler les tables. Ensuite, tout ce que vous avez à faire est d'ajouter l'attribut.
Par exemple, vous pouvez avoir un "Admin" attribut sur une vue qui sélectionne un utilisateur et de les ajouter à un rôle. Vous pouvez utiliser la procédure stockée pour ajouter l'utilisateur à le rôle.