Мне нужно реализовать некоторый механизм авторизации в моем приложении. Авторизация основана на объекте, который отправляется от клиента к серверу. Каждое действие в контроллере принимается как список аргументов. На основе вложенных свойств объектов в этом списке я должен предоставить или запретить доступ к действию контроллера. Мой первый подход заключался в использовании пользовательского атрибута фильтра
public class CustomAuthAttribute : FilterAttribute,IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
//SOME LOGIC HERE
}
}
Однако из-за того, что запрос является запросом json, мне сложно получить значения каждого соответствующего свойства отправленных объектов (у меня есть доступ только к значениям json). Вот почему я подумал, что могу использовать ActionFilterAttribute вместо FilterAttribute.
public class ActionFilterAuthorization: ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var castedList = filterContext.ActionParameters["key"] as List<MyObject>;
//logic here
//throw exception is access is not granted
}
}
Вопрос в том, является ли это хорошим решением для авторизации? Может быть лучше проверить авторизацию внутри действий??