Страница с отказом в доступе не перенаправляется
Я использую пользовательский поставщик ролей в своем веб-приложении asp.net mvc-4.
В моем классе "CustomRoleProvider" я расширил интерфейс "RoleProvider" и переопределил функции "IsUserInRole", "GetRolesForUser" и "GetAllRoles" в классе. Это отлично работает.
Теперь я пытаюсь перенаправить пользовательскую страницу (например, "~/Security/AccessDenied/Index"), если пользователь пытается получить доступ к действию, к которому у него нет доступа. Если пользователь пытается сделать это по умолчанию, он перенаправляет на домашнюю страницу. Чтобы перенаправить свою пользовательскую страницу, я расширил интерфейс AuthorizeAttribute и переопределил функцию OnAuthorization. Но похоже, что функция OnAuthorization никогда не вызывается.
Вот мой код для расширения интерфейса AuthorizeAttribute:
public class AccessDeniedAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (filterContext.Result is HttpUnauthorizedResult)
{
filterContext.Result = new RedirectResult("~/Security/AccessDenied/Index");
}
}
}
Почему не вызывается функция "OnAuthorization"? Нужна помощь...
1 ответ
Вам необходимо применить пользовательский атрибут к действиям или контроллерам (или добавить его в качестве общего фильтра для всех запросов). Используйте свой пользовательский атрибут вместо атрибута Authorize.
[AccessDeniedAuthorize(Roles="Admin")]
должно сработать.