ASP.Net MVC - условные несанкционированные перенаправления - PullRequest
2 голосов
/ 20 декабря 2011

Мое приложение MVC3 предоставляет пользователю три способа входа в систему

  1. Электронная почта + псевдоним
  2. Поставщик OpenID
  3. Имя пользователя + пароль

Первые два предназначены для посетителей без аккаунтов, что позволяет им комментировать / голосовать за вещи;последнее предназначено для авторов и администраторов, имеющих учетные записи пользователей базы данных с повышенными привилегиями.Таким образом, существует две формы входа в систему - одна для посетителей и одна для полных пользователей.

Неаутентифицированные / несанкционированные попытки доступа к ресурсу перенаправляются на страницу входа в качестве стандарта.

Вопрос:

  1. Как я могу условно перенаправить эти запросы на соответствующие?Ресурсы, требующие права автора / администратора для полной формы входа в систему, и Ресурсы, требующие только права посетителя для формы входа посетителей?

  2. Кроме того, могу ли я обработать предотвращение перенаправлений в случаеAJAX или частичное представление вызова?Например, я хотел бы встроить частичное представление комментариев в мое представление ввода, и если они не прошли проверку подлинности, не перенаправляют, а просто вставляют туда логин посетителей.

Обновление: я не хочу поддерживать 2 атрибута Atuhorize.

1 Ответ

1 голос
/ 20 декабря 2011

1 - Вы можете наследовать от [AuthorizeAttribute] и настроить реализацию для маршрутизации на нужную Несанкционированную страницу.

Смотрите выбранный awnser это вопрос: Перенаправление неавторизованного контроллера в ASP.NET MVC

2- Если вы загружаете частичные данные из вызова ajax (т. Е. $.Get(url) или $("#somediv").Load(url)), убедитесь, что действия, вызываемые url, должным образом оформлены в соответствии с вашим пользовательским [AuthorizeAttribute].

В противном случае вам потребуется некоторая логика в ваших видах бритвы, чтобы проверить, аутентифицирован ли пользователь. Что-то вроде

  @if (User.Identity.IsAuthenticated)
  {
      // Normal case
  }
  else
  {
      @Html.Partial("Login")
  }

Где ваш частичный логин будет отображать желаемый вид входа в систему.

Обновление

Вы можете реализовать 2 разных атрибута, по одному для каждого сценария.

[AttributeUsage( AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false )]
public class IsUserAdminAttribute : CustomAuthorizedBaseAttribute
{
    // Custom logic to redirect to admin logon partial/view
    ...
}

[AttributeUsage( AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false )]
public class IsAuthenticatedAttribute : CustomAuthorizedBaseAttribute
{
    // Custom logic to redirect to basic/comment logon partial/view
    ...
}

[AttributeUsage( AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false )]
public abstract class CustomAuthorizedBaseAttribute : AuthorizeAttirbute
{
    // Shared custom logic implementation
    ...
}

И вы можете использовать одно или другое, в зависимости от сценария, для украшения действий вашего контроллера.

...