TL; DRC# MVC simple authentification personnalisée avec les rôles
EDit
Fondamentalement, je veux juste dire à une fonction: Ok, je l'ai vérifié cet utilisateur moi-même, il est ok. Maintenant stocker des données arbitraires sur lui et créer une session pour lui qui lui donne des autorisations pour accéder à certaines parties de mon application.
quelque chose de ce genre:
logInUserFrameworkFunction(new UserStruct(int id, string username, RolesEnum[] roles));
Et que tout est géré en arrière-plan pour faire [Authorize(Roles = RolesEnum.Admin | RolesEnum.Manager)]
travail d'attribut.
Je pourrais faire cela avec des séances moi-même mais je voudrais sauter cette partie: D
Je joue avec MVC et Entity Framework, et maintenant je voudrais mettre en œuvre l'authentification utilisateur simple avec des rôles.
je User
classe/table de ma base de données qui ressemble à ceci:
public class User {
int ID;
string Email;
string Password;
Role Role;
...
}
Et Role
classe qui ressemble à ceci:
public class Role {
int ID;
RoleType Type; // this is an Enum
}
public Enum RoleType {
visitor, employee, admin
}
Maintenant, la vérification dans le contrôleur de connexion si l'utilisateur avec le nom d'utilisateur et le mot de passe spécifiés est facile, je fais juste quelque chose comme ceci:
[HttpPost]
public ActionResult LogIn(LogIn login) {
// If credentials are valid
if(new UserManager().IsValid(login.Username, login.Password)) {
var user = db.getUserByEmail(login.Username);
...
Je pourrais facilement stocker l'utilisateur ID
et Role
en session et que vérifier les informations d'identification en appelant certains function
sur chaque contrôleur pertinent, mais je veux utiliser une partie de C# et caractéristiques MVC.
Chose est que je préfère le faire avec des attributs, mais je ne sais pas comment.
C'est ce que je l'imaginais ressemblerait à ceci:
[Roles(RoleType.visitor, RoleType.employee)]
public ActionResult SomeProtectedAction() {
// only employee and visitor can access this,
// others get redirected to where ever
...
}
Il s'agit d'une véritable puissance des rôles, dans laquelle vous pouvez fournir un accès à grande échelle au contrôleur, puis réduire l'accès au niveau par méthode. Supposons que vous ayez un rôle appelé Staff, qui doit accéder à un contrôleur (l'ensemble du contrôleur est décoré pour que tout le monde dans le rôle Staff puisse y accéder). Supposons que vous souhaitiez limiter les capacités de suppression aux administrateurs uniquement. Vous devez donc décorer les méthodes de suppression avec le rôle Admin spécifiquement afin que seules les personnes * * * Personnel * et * Administrateurs puissent être supprimées. Les gens qui sont juste le personnel et les utilisateurs ne peuvent pas. (Logique métier: 2 rôles requis pour chaque compte) –
Je comprends comment utiliser des rôles comme celui-ci, mais comment puis-je me connecter à mon utilisateur. Y a-t-il une fonction comme celle-ci que je peux appeler? : 'identityLoginUser (new identityUser (int id, nom d'utilisateur de la chaîne, rôles RolesEnum []), et qu'il crée un cookie en arrière-plan et que tout fonctionne avec un minimum d'effort – Reygoch
Il est bon de comprendre les bases de l'identité ASP.NET: -) Regardez [ici] (http://www.codeproject.com/Articles/762428/ASP-NET-MVC-and-Identity-Understanding-the-Basics) et recherchez "Sign-In Helper - L'identité de base 2.0 API de connexion ". Cette v2.0, il y en a une plus récente, mais elle ne devrait pas être très différente. – Legends