2014-05-29 2 views
0

Если у меня действительно большая система, требующая аутентификации, мне сложно утопить мои контроллеры/методы действий как [Авторизовать]. Свободная безопасность, по-видимому, является хорошей идеей, предложенной Jon Gallaway, но нам все равно нужно позаботиться о каждом контроллере или методе действий, требующем аутентификации. Мне просто интересно, есть ли лучший подход, что-то даже лучше, чем свободная безопасность. Есть предположения?Итак, не существует ярлыка в применении атрибута authorize в asp.net MVC?

+0

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

ответ

1

Вы должны добавить [Authorize] в класс BaseAuthorizedController:Controller. Затем для классов, которые, как вы знаете, заблокировали функции. Вывод из этого класса заставит всех членов класса придерживаться базового класса атрибута [Authorize], и вам не нужно беспокоиться о каждой функции.

+0

Да, я думаю, что это путь. Благодарю. – Stack0verflow

1

Фильтр Authorize работает так, как он работает, и я не думаю, что есть готовое решение для того, чего вы пытаетесь достичь. Если у меня нет неправильного вопроса, вы хотите, чтобы все ваши контроллеры и действия контроллера были защищены от несанкционированного доступа по умолчанию, без каких-либо дополнительных шагов, чтобы аннотировать каждый контроллер/действие с помощью фильтра авторизации, правильно? Если это так, возможно, хорошим решением будет создание вашего собственного контроллера путем расширения класса Controller. Затем переопределите метод OnAuthorization. Например ...

public class CustomController : Controller 
{ 
    protected override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (context.HttpContext.User.Identity.IsAuthenticated) 
     { 
      ... 
     } 
    } 
} 

Затем вы можете проверить, был ли задан AllowAnonymous фильтр или нет

+0

Это круто. Тот же эффект, что и у @Irb. Я не знал, что класс контроллера имеет метод OnAuthorization. Благодарю. – Stack0verflow

+1

Да, это так, и самая важная часть заключается в том, что метод OnAuthorization является виртуальным методом (можно переопределить). Кроме того, вы сразу получаете доступ к текущему контексту, где вы можете получить доступ к объекту 'Request',' Response', куки-файлы и весь shebang. Вы даже можете принимать решения на основе бизнес-логики высокого уровня и выполнять перенаправления на основе состояния аутентификации текущего пользователя – Leo

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