2016-10-03 3 views
0

Ich verwende zum ersten Mal Mitgliedschafts- und Rollenanbieter für meine Anmeldeseite. Meine Mitgliedschaft war in Ordnung, aber ich konnte den Rollenanbieter nicht auf meiner Anmeldeseite verwenden. Ich habe einen Controller namens MyAccount Controller. Dieser Controller überprüft die Benutzerzugehörigkeit und wird nach der Überprüfung auf Basis der Benutzerrolle zum Home-Controller umgeleitet. HierWie verwende ich den Rollenanbieter in MVC 5?

MyAccount Controller:

[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(); 
    } 

Und

Home Controller:

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

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

I a m nicht sicher Wo sollte ich nach Benutzerrolle, In MyAccount Controller oder In Home Controller suchen?

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); 
    } 

Wie kann ich diese Roleprovider zu meinem Controller verwenden und umleiten oder Client-Aktion Admin?

Antwort

0

Registrieren benutzerdefinierten Rollenanbieter in web.config:

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

aktualisieren Login Aktionsmethode auf der MyAccount Controller:

if (Roles.IsUserInRole("Admin")) 
Verwandte Themen