У меня есть наборы контроллеров, каждый из которых используется для каждого типа авторизации. Например, авторизация класса А будет иметь набор контроллеров, каждый из которых требует авторизации класса А. Есть ли способ разместить где-нибудь один атрибут [Authorize(Role="Class A")]
, который будет применяться к каждому из этих контроллеров, без необходимости украшать каждый контроллер одним и тем же атрибутом?
Как авторизовать набор контроллеров, не размещая аннотацию на каждом?
Ответы (5)
Вы можете инициализировать эти контроллеры, производные от вашего базового контроллера. а именно поместите свой атрибут в базовый класс контроллера и убедитесь, что каждый контроллер внутри получен из базового класса.
[Authorize(Role="Class A")]
public class CustomBaseController : Controller{}
public class AController: CustomBaseController{}
public class BController: CustomBaseController{}
Да, есть способ, сделать все эти контроллеры 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
{
...
}
2 или 3 ответа объясняют, как это сделать... но вы также можете использовать Fluent Security для обрабатывать все контроллеры + настройка действий в одном файле. Некоторые из преимуществ (с их веб-сайта):
Конфигурация на основе кода
Никаких атрибутов или xml, загромождающих ваш код.
Низкий отпечаток
Fluent Security не будет распространяться в вашем приложении со скоростью лесного пожара. Ваша конфигурация может храниться в одном файле.
Вы можете наследовать от базового контроллера, такого как
[Authorize(Role = "Class A")]
public class ClassARequiredController : Controller {}
В противном случае вы бы смотрели на глобальный фильтр, и по вашему вопросу я предполагаю, что у вас есть несколько ролей и наборов, поэтому я не думаю, что глобальные фильтры для вас.
Установите атрибут в базовом классе и наследуйте, создавая иерархию, которая наилучшим образом соответствует вашему сценарию...