ASP.NET MVC проверяет, принадлежит ли пользователь группе [x] - PullRequest
6 голосов
/ 14 января 2010

Возможно, я подхожу к этому неправильно и должен делать все в действии фильтров, в этом случае, пожалуйста, укажите мне правильное направление!

Я настраиваю свое приложение ASP.NET MVC таким образом, чтобы одно действие HomeController Index предоставляло два разных типа контента, например:

if(Request.IsAuthenticated)
  return View("IndexRegistered");
else
  return View("IndexGuest");

Это нормально, но я хочу разделить его на три части, чтобы члены Администратора получили свою собственную страницу ...

if(Request.IsAuthenticated)
{
  if( /* user is a member of administrators */)
    return View("IndexAdministrator");
  else
    return View("IndexCustomer");
}
else
  return View("IndexGuest");

Может ли кто-нибудь просветить меня относительно недостающего фрагмента этой головоломки?

Ответы [ 2 ]

21 голосов
/ 14 января 2010

Используйте Roles свойство Авторизовать Фильтр действий :

[Authorize(Roles="Administrators,Moderators")]
public ActionResult SomeAction(){

}

Или используйте метод User.IsInRole():

if(User.IsInRole("Administrator")) { ... }
2 голосов
/ 20 июля 2013

Если вы посмотрите на провайдера аутентификации, который поставляется «из коробки» в шаблонах проектов MVC по умолчанию, то легко добавить туда свою поддержку ролей и отслеживать ее в сеансе, поэтому приведенный выше код станет:

if(Request.IsAuthenticated)
{
  if(Session["Role"] == "Administrator")
    return View("IndexAdministrator");
  else
    return View("IndexCustomer");
}
else
  return View("IndexGuest");

, а затем открывает такие возможности, как:

if(Request.IsAuthenticated)
  return View("Index" + Session["Role"]);
else
  return View("IndexGuest");
...