Есть типичное трехзвенное приложение в духе Domain Model. Т.е. имеем БД, слой доступа к БД (ORM), application layer и presentation layer в виде смарт-клиента, богатого на сложные м красочные контролы.
Для каждого объекта в системе хотелось бы определить права доступа: т.е. есть много юзеров, каждый из которых может или не может читать/изменять/создавать/удалять объекты. Т.е. определяется набор действий (создание, удаление, чтение итд), набор объектов, над которыми могут производиться эти действия (счет, организация, персона итд итп), а также возможно наличие ролей (т.е. определенный набор действий над определенными объектами).
Вопрос: как лучше всего это реализовать? Если подходить в лоб, то сталкиваемся с проблемой кросскаттинга — весь программный код (а особенно на клиенте) будет пропитан кодом определения доступа.
Наверняка есть какие-то best practices или даже небольшие фреймворки, свзязанные с этой проблемой

Посоветуйте что-нибудь