В вашей версии ASP.NET нет определения класса, поэтому я предполагаю, что вы наследуете ActionFilterAttribute
class .Просто заметил, что это не так.Смотрите отредактированную версию .Если это так, то вы можете зарегистрировать свой фильтр глобально для всех действий и контроллеров веб-API в WebApiConfig.cs
следующим образом:
public static void Register(HttpConfiguration config)
{
config.Filters.Add(new CustomAuthorize());
}
Редактировать
Совершенно неправильно понял вашу ситуацию,Так что есть больше информации.Вы можете использовать свои собственные фильтры глобальной авторизации:
public class CustomAuthorize : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
// user not authorized, redirect to login page
filterContext.Result = new HttpUnauthorizedResult();
return;
}
string roleName = GetModuleName(filterContext);
var user = filterContext.HttpContext.User;
// Chaeck user permissions
if (!user.IsInRole(roleName))
{
// Handle not authorized requests and redirect to error page
filterContext.Result = new RedirectResult("~/Error/NotAuthorized");
return;
}
base.OnAuthorization(filterContext);
}
string GetModuleName(AuthorizationContext filterContext)
{
var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerType.FullName;
var actionName = filterContext.ActionDescriptor.ActionName;
return controllerName; // or actionName
}
}
Чем вы можете глобально зарегистрировать свой фильтр для всех действий и контроллеров в WebApiConfig.cs
, например:
public static void Register(HttpConfiguration config)
{
filters.Add(new CustomAuthorize());
}
или использовать только вопределенные контроллеры / действия.
Только будьте осторожны, этот подход не работает для веб-API, только для MVC, поскольку у веб-API есть свой собственный AuthorizeAttribute
, расположенный в System.Web.Http
(версия MVC находится в System.Web.Mvc
),Реализация немного отличается, но вы можете просто искать примеры.Таким образом, вам понадобятся атрибуты who - один для MVC и один для WEB API.См. Оригинальный ответ, чтобы узнать, как зарегистрировать веб-фильтр глобально или использовать его только для определенных контроллеров.