2015-07-24 3 views
0

В настоящее время я работаю над настройкой разрешений для своего веб-приложения. Не каждый должен иметь доступ к определенным страницам, например, создавать/редактировать/удалять (обычно) или добавлять новые права для пользователей. У меня есть таблица в моей базе данных, которая отслеживает пользователей и их роль/права. Я переопределяю AuthorizeAttribute. То, что я хотел бы сделать, - это когда пользователь не имеет права доступа к странице, для того, чтобы они были перенаправлены обратно на страницу, на которой они были только, и предупреждение, в котором говорится, что у них нет доступа.MVC Reroute к действию, когда пользователь не авторизован

Пример: если они находятся на домашней странице и нажмите кнопку «Добавить новую вещь», если у них нет прав, они будут перенаправлены на домашнюю страницу с ошибкой.

Для выполнения этой работы мне необходимо получить доступ к предыдущим именам действий/контроллеров, поскольку предыдущая страница никогда не может быть одинаковой.

Текущий заказ AuthorizeAttribute HandleUnauthorizedRequest Метод

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
{ 
    filterContext.Result = new RedirectToRouteResult(
           new RouteValueDictionary { 
            { "action", filterContext.RouteData.Values["action"] }, 
            { "controller", filterContext.RouteData.Values["controller"] } 
           }); 
} 

Это заставляет меня действие/контроллер, который они пытаются получить доступ, я умею попасть туда, куда они идут?

+1

Я считаю, что лучшим выбором будет заголовок Referer (sic). – klings

+0

@klings Вы могли бы немного разобраться? –

+1

Результат = новый RedirectResult (filterContext.HttpContext.Request.UrlReferrer) –

ответ

0

Использование Klings и Stephen.vakil совета у меня есть:

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
{ 
    Uri requestUrl = filterContext.HttpContext.Request.UrlReferrer; 
    if (requestUrl != null) 
    { 
     filterContext.Result = new RedirectResult(requestUrl.ToString()); 
    } 
    else 
    { 
     filterContext.Result = new RedirectToRouteResult(
            new RouteValueDictionary { 
             { "action", "NotAuthorized" }, 
             { "controller", "Admin" } 
            }); 
    } 
} 

Если был ссылающийся затем взять их обратно на эту страницу, но мне еще нужен всплывающее окно появится, когда они достигают эту страницу. Я знаю, что это можно сделать в каждом отдельном представлении с помощью javascript и alert(), но я ищу что-то, что можно сделать в одном месте, не приспосабливая другие виды, если это возможно. Если нет, отправьте на общую страницу, указав, что они не авторизованы.

Смежные вопросы