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