2015-07-30 2 views
0

Вот моя проблема. У меня есть 2 роли один для «Администратора» и последний для «Клиент». В моем HomeController у меня есть действие «Индекс», к которому я хочу получить доступ только роль «Администратор». Поэтому, когда у меня есть x пользователь, прошедший проверку подлинности, который не имеет роли «Администратор», я хочу, чтобы он не перенаправлялся на страницу входа в систему (указанную в моем файле веб-конфигурации), а на конкретное действие. Вот мой кодПеренаправление внутри Controller.OnAuthorization в ASP.NET MVC 4

[Authorize(Roles="Administrator")] 
    public ActionResult Index() 
    { 
     List<object> users = new List<object>(); 
     foreach (MembershipUser u in Membership.GetAllUsers()) 
     { 
      users.Add(u); 
     }    
     return View(users); 
    }   
    protected override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (User.Identity.IsAuthenticated && !User.IsInRole("Administrator")) 
     { 
      if (filterContext.RequestContext.HttpContext.Request.RawUrl == "/") 
      { 
       filterContext.Result = new RedirectResult(Url.Action("Denied")); 
      } 
      //filterContext.HttpContext.Response.Redirect("/Home/Denied"); 
     } 
     else 
     { 
      base.OnAuthorization(filterContext); 
     }      
    } 
    //this action is for any authenticated user 
    [Authorize]  
    public ActionResult Denied() 
    { 
     return View(User.Identity.Name); 
    } 

Этот вопрос бросает System.InvalidOperationException и ~/Views/Home/xyz.cshtml не существует. Конечно, url должен быть ~/Views/Home/denied.cshtml Для информации «xyz» является аутентификация UserName. Как я могу перенаправить? Thanks

+0

'вернуться View (Пользователь.Идентичность.Имя);' бросает ошибку вы видите – JamieD77

+0

, если вы пытаетесь вернуть имя пользователя вам нужно указать, что 'User.Identity .Name' является моделью с помощью 'return View (model: User.Identity.Name);' – JamieD77

+0

Вы правы, первый строковый параметр в представлении конструктора соответствует имени представления. Большое спасибо. –

ответ

1

Включите вашу модель в объект.

[Authorize]  
public ActionResult Denied() 
{ 
    return View((object)User.Identity.Name); 
} 
0

ваше заявление может отличаться. попробуйте это

if (!User.Identity.IsAuthenticated || !User.IsInRole("Administrator")) 
Смежные вопросы