2016-10-03 3 views
0

Я в первый раз использую членство и роль поставщика для моей страницы входа. Мое членство работало нормально, но я не мог использовать роль поставщика на моей странице входа. У меня есть один контроллер с именем MyAccount controller. Этот контроллер проверяет членство пользователя и после проверки перенаправляет его на Домашний контроллер на основе роли пользователя. Вот контроллерКак использовать службу роли в MVC 5?

MyAccount:

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

И

Главная Контроллер:

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

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

I A m not sure Где я должен проверить роль пользователя, в MyAccount Controller или 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); 
    } 

Как я могу использовать этот RoleProvider в мой контроллер и перенаправлять его администратором или клиент действий?

ответ

0

Зарегистрировать пользовательский поставщик роль в web.config:

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

Update Login метод действия на MyAccount контроллера:

if (Roles.IsUserInRole("Admin")) 
Смежные вопросы