2013-08-27 2 views
3

Я смог найти несколько примеров проверки подлинности на основе ролей, но это не проблема проверки подлинности. У меня три пользовательских типа, одна из которых я хочу иметь другую начальную страницу по умолчанию. Route-config инициализируется до получения информации о пользователе.Просмотр по умолчанию по умолчанию на основе

В скорлупе ореха: Если роль А или Роль запуска B ниже

Controller: Home 
Action: Index 

еще:

Controller: Other 
Action: OtherIndex 

Где и как это должно быть реализовано?

EDIT

Это должно происходить только в первый раз, сайт, доступ, другие пользователи могут перейти на главную/Index, просто не по умолчанию.

EDIT

Используя Suggestion Брэда я создал атрибут перенаправлять с его переназначения логики, и применил его к указателю. Затем я создал другое действие для страницы. Таким образом, если мне необходимо разрешить доступ к HomeIndex я могу определенно назначить его с Главным/HomeIndex, и все, что использует маршрутизацию по умолчанию может ударить дом/Index

[RedirectUserFilter] 
public ActionResult Index() 
{ 
    return HomeIndex(); 
} 

Для тех, кто нуждается в ней - вот атрибуте

public class RedirectUserFilterAttribute: ActionFilterAttribute 
    { 
     public override void OnActionExecuting(ActionExecutingContext actionContext) 
     { 

      if (!HttpContext.Current.User.IsInRole("Role A") 
      && !HttpContext.Current.User.IsInRole("Role B")) 
      { 
       actionContext.Result = new RedirectToRouteResult(
       new RouteValueDictionary { 
          { "Controller", "OtherController" }, 
          { "Action", "OtherAction" } }); 
      } 

      } 
     } 

ответ

5
public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     if (
      !User.IsInRole("Something") && 
      !User.IsInRole("Role B") 
     ) return RedirectToAction("OtherIndex"); 
     // ... 
    } 
} 

То же самое касается OtherController.

В качестве альтернативы вы можете создать свой собственный ActionFilter, который ищет условно названное действие (например, IndexRolename над Index)

+0

Я не всегда нужен перенаправить, только в первый раз, сайт доступен – Seth

+2

я бы сказал, «ActionFilter» или «AuthorizationFilter» будет лучшим способом, чтобы вы могли применять свое правило по всем запросам и не добавлять код к каждому методу действий. – asymptoticFault

+0

@Seth: вы можете отслеживать запрос, используя сеанс или флаг профиля; ваш звонок. –