Страница с отказом в доступе не перенаправляется

Я использую пользовательский поставщик ролей в своем веб-приложении 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")] 

должно сработать.

Другие вопросы по тегам