Мой MVC3 приложение предоставляет три способа для пользователя, чтобы войти вASP.Net MVC - Условный Несанкционированное Перенаправление
- Email + Псевдоним
- OpenID провайдер
- Имя пользователя + пароль
первые два для посетителей без учетных записей, что позволяет им комментировать/голосовать за вещи; последнее для авторов и администраторов, у которых есть учетные записи пользователей db с повышенными привилегиями. Таким образом, существует два регистрационных бланка: один для посетителей и один для полных пользователей.
Неавторизованные/неавторизованные попытки доступа к ресурсу в качестве стандарта перенаправляются на страницу входа в систему.
Вопрос:
Как я мог бы условно перенаправить эти запросы на соответствующие? Ресурсы, требующие прав Author/Admin для полной формы входа в систему пользователя, а ресурсы, требующие только привилегий посетителя для регистрации посетителей в форме?
Кроме того, могу ли я работать, избегая переадресаций в случае вызова AJAX или частичного просмотра? Например, я хотел бы включить частичное представление комментариев в свой вид ввода, и если они не прошли проверку подлинности, а не перенаправляют, а просто вставляют в них журнал посетителей.
Обновление: Я не хочу поддерживать 2 атрибута Atuhorize.
Спасибо за ответ. Это близко, но не то, что я ищу. У меня есть настраиваемый фильтр/атрибут авторизации, и я думал о методе 'OnAuthorization()', но я стараюсь, чтобы все вещи DRY были максимально возможными, поэтому я стараюсь избегать того, чтобы мой атрибут был в курсе Views.Что касается логики AJAX, даже если бы я был включен в Razor, как вы предположили, если мой атрибут вызывает перенаправление, это вызовет ту же проблему, нет? Наконец, мне кажется, что я должен был знать о требуемых ролях, чтобы знать, в какую регистрационную форму они должны быть отправлены. –
«Что касается логики AJAX, даже если я заключил в Razor, как вы сказали, если мой атрибут вызывает перенаправление, это вызовет ту же проблему, нет?» Yup, это либо украшение '[AuthorizeAttribute]' (если вы на самом деле вызываете действие контроллера для рендеринга вашего частичного), либо некоторый '@if (User.Identity.IsAuthenticated) {...}' wrapping (если вы выполняете частичное без вызов любого действия контроллера). –
«У меня есть настраиваемый фильтр/атрибут авторизации, и я думал о методе OnAuthorization(), но я стараюсь, чтобы все вещи DRY были максимально возможными, поэтому я стараюсь избегать того, чтобы мой атрибут был в курсе« Views ». Не можете ли вы использовать 2 разных класса, которые наследуются от '[AuthorizeAttribute]'? Или, что еще лучше, добавьте слой наследования между вашим 2 пользовательским '[AuthorizeAttribute]', чтобы сохранить общий материал. –