Если текущий пользователь не в роли, требуемой для [Авторизация], могу ли я автоматически перенаправить его? - PullRequest
3 голосов
/ 20 июня 2010

На создаваемом мной сайте ASP.NET MVC у меня есть несколько методов, в которых пользователи, которые их используют, должны играть определенную роль (как это бывает, если это не так, это означает, что они отстраненысайт).Для этого я без проблем использую атрибут [Authorize(Roles="RoleName")].

Однако я не совсем понимаю, что происходит с пользователями, которые не прошли проверку [Authorize]?Что они показывают?

Я хочу перенаправить приостановленных пользователей к другому действию, если они пытаются использовать эти методы.Сейчас я использую пустой атрибут [Authorize] (без указания ролей), а затем проверяю в коде действия, является ли пользователь частью роли.

Мой подход напоминает кодзапах для меня. Можно ли указать, что показывать пользователю (или куда перенаправлять его), если они не проходят проверку [Authorize]?

Ответы [ 2 ]

4 голосов
/ 20 июня 2010

Как указано на странице AuthorizeAttribute MSDN :

Если неавторизованный пользователь пытается получить доступ к методу, помеченному атрибутом Authorize, платформа MVC возвращает HTTP 401код состояния.Если сайт настроен на использование проверки подлинности с помощью форм ASP.NET, код состояния 401 заставляет браузер перенаправить пользователя на страницу входа.

Если вы используете проверку подлинности с помощью форм и хотите перенаправить настраница входа, вам нечего делать.В противном случае реализуйте свой собственный IAuthorizationFilter, чтобы выполнить перенаправление.

Редактировать : см. этот пост , который в основном переопределяет AuthorizeAttribute вручную, с настраиваемым перенаправлением.

1 голос
/ 21 июня 2010

Если вы не хотите реализовывать свой собственный IAuthorizationFilter, я считаю, что вы должны иметь возможность переопределить поведение по умолчанию атрибута Authorize.Просто наследуйте и переопределяйте метод HandleUnauthorizedRequest .Конечно, вам все равно понадобится способ определить, произошел ли сбой пользователя из-за того, что он не вошел в систему, а не имеет необходимых разрешений.Может быть чище написать собственный фильтр авторизации.

...