В качестве теоретического упражнения, чтобы помочь мне изучить все входы и выходы модели членства в отношении MVC, я хочу выяснить, могу ли я загружать разрешения из внешнего ресурса, для целей моего прототипа у меня есть квартира файл с таким списком:
Controller1,Method1,Get,Anonymous
Controller1,Method1,Post,User,Administrator
Controller2,Method1,Get,Administrator
Controller2,Method1,Post,Administrator
Controller2,Method2,Get,User,Editor,Administrator
Controller2,Method2,Post,Editor,Administrator
Что я могу проанализировать с помощью регулярных выражений, чтобы получить список ролей, которые имеют разрешения для каждой комбинации контроллер / действие / глагол.
У меня есть действие контроллера:
[CustomAuthorize]
public ActionResult Index()
{
/* Do stuff */
}
У меня также есть свой компонент авторизации:
public class CustomAuthorize : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
/* How do I access which Controller/Action/Verb fired this? */
}
}
Чтобы на лету определить, какие роли имеют доступ к этому контроллеру / действию / глаголу, мне нужно определить, какой контроллер / действие / глагол называется атрибутом CustomAuthorize.
Я знаю, что могу добавить свойства в свой класс следующим образом:
public class CustomAuthorize : AuthorizeAttribute
{
public string Controller { get; set; }
public string Action { get; set; }
public string Verb { get; set; }
}
А затем вызвать мой атрибут, используя:
[CustomAuthorize(Controller="Home",Action="Index",Verb="Get")]
public ActionResult Index()
{
}
Но это похоже на головную боль от обслуживания. Было бы хорошо, если бы я мог просто использовать [Authorize]
, и чтобы мой метод CustomAuthorize.AuthorizeCore определял, какой контроллер / действие / глагол ссылался на него из метода AuthorizeCore.
Возможно ли это? Если да, может ли кто-нибудь указать мне правильное направление информации о том, как мне этого добиться?