Запустите код в Hibernate Filters
У меня есть довольно сложный механизм безопасности, который я реализовал с использованием Apache Shiro (ранее JSecurity). Чтобы узнать точные правила видимости для объекта, мне нужно запустить некоторый код (например, поиск ролей пользователя, разрешений, групп и т. Д.). Я хотел бы выполнить запросы, которые сообщают мне объекты, которые текущий пользователь имеет право видеть.
Я обнаружил, что фильтры гибернации дают вам возможность применить фильтр к вашим объектам / запросам, что, похоже, я мог бы использовать здесь.
Тем не менее, примеры, которые я нашел, похоже, сосредоточены на базе данных (то есть, скажем, у меня есть поле / столбец isVisible, фильтруйте каждый раз, когда он установлен в true). Есть ли способ, которым я могу запустить некоторый код в качестве фильтра гибернации, или это просто тонкий слой, который добавляет небольшое предложение WHERE для всех ваших запросов.
Я на самом деле использую это внутри инфраструктуры Grails / GORM, так что, возможно, есть другие решения, которые являются действительными. Существует плагин, который интегрирует фильтры гибернации, но если я не смогу использовать его с некоторым кодом для запуска в процессе фильтрации гибернации, он мне здесь действительно не поможет.
1 ответ
К сожалению, фильтры Hibernate не решат вашу проблему. Они могут быть очень полезны, но это точно тонкий слой, который добавляет небольшое предложение WHERE к каждой выборке.
Поскольку вы используете Grails, вы можете обнаружить, что AOP даст вам то, что вы ищете. Взгляните на это: http://www.infoq.com/articles/aop-with-groovy
Удачи.