2016-10-03 6 views
0

Je suis la première fois en utilisant l'adhésion et le fournisseur de rôle pour ma page de connexion. Mon adhésion a bien fonctionné, mais je ne pouvais pas utiliser le fournisseur de rôle sur ma page de connexion. J'ai un contrôleur nommé contrôleur MyAccount. Ce contrôleur vérifiera l'appartenance de l'utilisateur et, après vérification, il redirigera vers le contrôleur Home en fonction du rôle de l'utilisateur. VoiciComment utiliser le fournisseur de rôles dans MVC 5?

contrôleur MonCompte:

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Login(Login l, string returnUrl = "") 
    {if (ModelState.IsValid) 
     { 
      var isValidUser = Membership.ValidateUser(l.UserName, l.Password); 
      if (isValidUser) 
      { 
       FormsAuthentication.SetAuthCookie(l.UserName, l.RememberMe); 
       if (Url.IsLocalUrl(returnUrl)) 
       { 
        return Redirect(returnUrl); 
       } 

       else If(*"USER ROLE AS ADMIN"*) 
       { 
        RedirectToAction("AdminIndex","Home"); 
       } 
       else 
       { 
        RedirectToAction("ClientIndex","Home"); 
       } 

      } 
     } 
     ViewBag.ErrorMassage = "Wrong Id or Password"; 
     ModelState.Remove("Password"); 
     return View(); 
    } 

Et

Accueil Contrôleur:

[Authorize (Roles= "Admin")] 
    public ActionResult AdminIndex() 
    { 
     return View(); 
    } 

    [Authorize (Roles = "Client")] 
    public ActionResult ClientIndex() 
    { 
     return View(); 
    } 

I a Je ne sais pas où je devrais vérifier le rôle de l'utilisateur, dans MyAccount Controller ou In Home Controller?

RoleProvider:

public override string[] GetRolesForUser(string username) 
    { 
     if (!HttpContext.Current.User.Identity.IsAuthenticated) 
     { 
      return null; 
     } 

     //check cache 
     var cacheKey = string.Format("{0}_role", username); 
     if (HttpRuntime.Cache[cacheKey] != null) 
     { 
      return (string[])HttpRuntime.Cache[cacheKey]; 
     } 
     string[] roles = new string[] { }; 
     roles = gateway.GetUserRole(username); 
     { 

      if (roles.Any()) 
      { 
       HttpRuntime.Cache.Insert(cacheKey, roles, null, DateTime.Now.AddMinutes(_cacheTimeoutInMinute), Cache.NoSlidingExpiration); 

      } 
     } 
     return roles; 
    } 
public override bool IsUserInRole(string username, string roleName) 
    { 
     var userRoles = GetRolesForUser(username); 
     return userRoles.Contains(roleName); 
    } 

Comment puis-je utiliser ce RoleProvider à mon contrôleur et rediriger vers Admin ou Action du client?

Répondre

0

Inscrivez votre fournisseur de rôle personnalisé dans web.config:

<roleManager defaultProvider="DefaultRoleProvider"> 
    <providers> 
     <add name="DefaultRoleProvider" type="MyNamespace.MyRoleProvider, MyAssembly" /> 
    </providers> 
</roleManager> 

méthode d'action de mise à jour Login sur le contrôleur MyAccount:

if (Roles.IsUserInRole("Admin"))