Авторизовать текущего пользователя против контроллера и имени действия в ASP.NET MVC 3
Мне нужно создать настраиваемую авторизацию в ASP.NET MVC 3. Внутри приложения авторизация определяется в 5 таблицах: пользователи, группы, группы пользователей, права, grouprights. Пользователь может принадлежать нескольким группам, и каждое право может быть назначено нескольким группам. Каждому действию контроллера присваивается значение RightID.
Встроенная авторизация не может соответствовать этой настройке, поэтому я попытался создать настраиваемый атрибут AuthorizeAttribute. При переопределении AuthorizeCore я понял, что у меня нет доступа к имени контроллера и имени действия.
Могу ли я каким-то образом попросить маршрутизатора проанализировать Request.RawUrl внутри AuthorizeCore, чтобы получить имя контроллера и действия? Или есть другой способ сделать то, что я хочу?
Ответы
Ответ 1
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var routeData = httpContext.Request.RequestContext.RouteData;
var controller = routeData.GetRequiredString("controller");
var action = routeData.GetRequiredString("action");
...
}
Ответ 2
Вы можете достичь этого, используя Action Filters, где у вас есть доступ ко всем HttpContex.
public class MyAuthorizeAttribute : ActionFilterAttribute, IAuthorizationFilter
{
#region Implementation of IAuthorizationFilter
public void OnAuthorization(AuthorizationContext filterContext)
{
// ... implementation
// filterContext.Controller is the controller
// filterContext.RouteData is all the route data