2013-04-25 3 views
0

Я хочу, чтобы все пользователи заполняли дополнительную информацию до того, как они перейдут в ЛЮБОЙ раздел сайта, для которого требуется аутентификация.MVC4 Intercept ALL Запросы, требующие аутентификации

Если возможно, я хотел поймать на [Authorize] аннотаций, но игнорировать любые @User.IsInRole("something")

Есть ли способ, что я могу переопределить в Global.asax или?

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

ответ

0

Вы можете переопределить AuthorizeAttribute; который даст вам доступ к методу OnActionExecuting(), который запускается, когда вызывается действие, отмеченное [Authorize]. Оттуда вы можете либо добавить свою собственную логику аутентификации, либо обратиться к базовым методам, а затем перенаправить на соответствующую ошибку или форму, если дополнительные данные необходимо заполнить. Вы должны уметь ссылаться на свой первоначальный запрос в качестве запроса URL-адреса возврата , чтобы пользователь мог продолжать движение туда, куда бы они ни пошли, после того, как будут приняты дополнительные данные. Затем вам потребуется заменить все виды использования [Authorize] с помощью этого настраиваемого атрибута, но поиск и замена должны позаботиться об этом.

+0

Я уже реализовал свой собственный атрибут '[Auth()]'. Я надеялся, однако, чтобы убедиться, что если кто-либо еще сделал развитие (или я забыл), что-то глобальное, что поймает ошибку. – Jared

+0

То, что мы обычно идем и немного лучше с точки зрения безопасности, инвертирует атрибут. Таким образом, вы не укажете его на контроллерах, требующих проверки подлинности, но на тех, которые этого не делают. Таким образом, разработчикам не нужно запоминать и быстро находить, если они пытаются получить доступ к чему-то и не могут. – Jakub

Смежные вопросы