Я работал над проектом, в котором данные были отфильтрованы по авторизации пользователя. Используемый метод был похож на ваш метод AuthorizationManager. Для этого потребовалось много фильтрующего кода, но он работает нормально и прост для понимания.
Существуют и другие методы, ваша идея, безусловно, может быть реализована. То, что вы имеете в виду, использует Аспектно-ориентированное программирование, АОП. Это распространенный способ в мире Java, а также возможен в .Net. PostSharp - одна сторонняя библиотека, которая делает это возможным. Я никогда не использовал PostSharp в рабочем проекте, но сейчас я играю с ним, чтобы самостоятельно изучить AOP.
Ниже приведен пример аспекта, реализованного с помощью PostSharp, который изменяет возвращаемое значение метода для фильтрации возвращаемых данных. Это фиктивный аспект, в котором я играю с демо PostSharp , фильтруя возвращаемые данные, чтобы вернуть только те контакты, которые содержат букву «S».
Как видите, этот аспект требует, чтобы возвращаемое значение было IQueryable. Я подозреваю, что вам всегда нужно иметь базовые знания о типе возвращаемых значений, например, если вы работаете с IQueryable, ICollection, массивами или чем-то еще.
[Serializable]
public class CollectionFilterAspect : OnMethodBoundaryAspect
{
public override void OnExit(MethodExecutionArgs args)
{
base.OnExit(args);
IQueryable<Contact> retVal = (IQueryable<Contact>)args.ReturnValue;
args.ReturnValue = from r in retVal where r.LastName.Contains("S") select r;
}
}
Чтобы использовать этот аспект, вы можете использовать предложенный синтаксис, поместив атрибут в метод, чтобы указать, что он должен быть отфильтрован.
[CollectionFilterAspect]
public IQueryable<Contact> GetByName(string value)
Хотя эта короткая демонстрация иллюстрирует, что это, безусловно, возможно, это может быть или не быть хорошей идеей. У меня нет опыта использования этого программного обеспечения в реальном мире, поэтому я не могу вам помочь.