У меня есть довольно сложный механизм безопасности, который я реализовал с использованием Apache Shiro (ранее JSecurity). Чтобы узнать точные правила видимости для объекта, мне нужно запустить некоторый код (то есть поиск ролей пользователя, разрешений, групп и т. Д.). Я хотел бы выполнить запросы, которые сообщают мне объекты, которые текущий пользователь имеет право видеть.
Я обнаружил, что фильтры гибернации дают вам возможность применить фильтр к вашим объектам / запросам, что, похоже, я мог бы использовать здесь.
Тем не менее, примеры, которые я нашел, похоже, сосредоточены на базе данных (то есть, у меня есть поле / столбец isVisible, фильтруйте всякий раз, когда для него установлено значение true). Есть ли способ, которым я могу запустить некоторый код в качестве фильтра гибернации, или это просто тонкий слой, который добавляет небольшое предложение WHERE для всех ваших запросов.
Я на самом деле использую это внутри инфраструктуры Grails / GORM, так что, возможно, есть и другие решения, которые являются действительными. Плагин существует , который интегрирует фильтры гибернации, но если я не смогу использовать его с некоторым кодом для запуска как часть процесса фильтрации гибернации, он мне здесь действительно не поможет.