В нашем приложении есть понятие PermissionAttribute
. Этот атрибут определен в базовом слое нашего приложения, и наши команды и запросы украшены этим атрибутом. Поскольку этот атрибут определен в базовом слое, мы не можем (и не хотим) позволить ему наследоваться от FilterAttribute
или реализовать на нем System.Web.Mvc.IActionFilter
.
Тем не менее, мы хотели бы применить этот атрибут к действиям контроллера следующим образом:
[Permission(Permissions.Administration.ManageUsers)]
public ActionResult Index()
{
return this.View();
}
На основе этого атрибута должны применяться надлежащие проверки безопасности. Я просматривал кодовую базу MVC, чтобы найти подходящие хуки для настройки поведения MVC, позволяющие добавлять эти проверки безопасности на основе этого пользовательского атрибута. Я думал о создании пользовательского ControllerActionInvoker
, который возвращал пользовательский ReflectedControllerDescriptor
из своего метода GetControllerDescriptor
, который возвращал бы FilterAttribute
, который будет создан на основе существования PermissionAttribute
, но это похоже на много работы, и я не уверен, что это правильный путь для прогулки.
Каким был бы эффективный и приятный способ настроить конвейер MVC, чтобы мы могли обрабатывать этот атрибут, не связанный с MVC?
AuthoriseAttribute
, поместить туда логику для проверки вашегоPermissionAttribtue
и добавить ее в свое приложение по всему миру? - person DavidG   schedule 17.09.2014