3

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

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

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

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

ответ

4

Как указана на AuthorizeAttribute MSDN page:

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

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

Редактировать: см. this blog post, которые в основном переопределяют Авторизованный атрибут вручную, с пользовательским перенаправлением.

+0

Как перенаправить пользователя на страницу входа, если пользователь уже зарегистрирован (но не имеет достаточных привилегий)? Кроме того, как я могу реализовать свой собственный IAuthorizationFilter? Благодаря! –

1

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