2010-06-25 4 views
5

i m using .NET mvc2 для моего приложения. Я хочу, чтобы какие-то пользовательские полномочия выполнялись по моим действиям. Я немного искал Google, и, похоже, есть два варианта.Авторизованные фильтры против Action Filters

  • Реализовать логику в onActionExecuting в пользовательских действиях фильтра, see this post
  • Подкласса authorizeattribute или реализуют интерфейс Iauthorization и поставить свою логику там

Моим вопрос в том, что, какой метод предпочтительнее с плюсами и минусами используя каждую технику

Редакция:

: Кроме того, я могу переопределить onActionExecuting и onAuthorization в моем базовом контроллере, что дает мне преимущество доступа к переменным контроллера directl у.

+0

Вы нашли какие-либо профи и недостатки? Сейчас я занимаюсь тем же вопросом. Какое у вас решение? – 2011-01-06 13:15:42

+0

Использование onActionExecuting дает возможность получить доступ к частным пользователям. а в фильтрах у, вероятно, есть доступ только к общедоступным свойствам и методам. Я использовал подкласс AuthorizeAttribute, потому что это то, для чего он предназначен, и дает вам чистое разделение проблем –

ответ

3

Хотя оба варианта правильны, то лучше подкласс AuthorizeAttribute по этим причинам:

  1. Разделение проблем.
  2. MVC предоставляет Авторизованный атрибут для этой цели (не сражайтесь с каркасом).
  3. Фильтр авторизации запускается первым - перед другими фильтрами (для Pro ASP.NET MVC3 Framework, стр. 431). Это гарантирует, что ненужный код не будет выполняться, если неконтролируемый пользователь попадет в ваш контроллер/действие.