Как авторизовать набор контроллеров, не размещая аннотации на каждом из них? - PullRequest
8 голосов
/ 23 марта 2012

У меня есть наборы контроллеров, каждый из которых используется для каждого типа авторизации. Например, авторизация класса А будет иметь набор контроллеров, каждый из которых требует авторизации класса А. Есть ли способ разместить где-нибудь один атрибут [Authorize(Role="Class A")], который будет применяться к каждому из этих контроллеров без необходимости украшать каждый контроллер одинаковым атрибутом?

Ответы [ 5 ]

11 голосов
/ 23 марта 2012

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

[Authorize(Role="Class A")]
public class CustomBaseController : Controller{}

public class AController: CustomBaseController{}

public class BController: CustomBaseController{}
4 голосов
/ 23 марта 2012

2 или 3 ответа здесь объяснили, как вы можете это сделать ... но вы также можете использовать Fluent Security для обработки всех контроллеров + настройки действий в одном файле. Некоторые из преимуществ (с их сайта):

Кодовая конфигурация

Никаких атрибутов или xml не загромождают ваш код.

Низкий отпечаток

Fluent Security не будет распространяться как лесной пожар в вашем приложении. Ваша конфигурация может храниться в одном файле.

4 голосов
/ 23 марта 2012

Да, есть способ, сделать все эти A-class контроллеры производными от одного базового контроллера и поместить на него AuthorizeAttribute:

[Authorize(Role="Class A")]
public class AController : Controller 
{
    ...
} 

public class AFirstController : AController // Gets it's parent attribute
{
    ...
} 

public class ASecondController : AController // Gets it's parent attribute
{
    ...
} 
3 голосов
/ 23 марта 2012

Вы можете наследовать от базового контроллера, такого как

[Authorize(Role = "Class A")]
public class ClassARequiredController : Controller {}

В противном случае вы бы смотрели на глобальный фильтр, и по вашему вопросу я предполагаю, что у вас несколько ролей и наборов, поэтомудумаю, что глобальные фильтры для вас.

2 голосов
/ 23 марта 2012

Установите атрибут для Базовый класс и наследуйте, создавая иерархию, которая наилучшим образом соответствует вашему сценарию ...

...