Запустите код в Hibernate Filters - PullRequest
2 голосов
/ 02 ноября 2009

У меня есть довольно сложный механизм безопасности, который я реализовал с использованием Apache Shiro (ранее JSecurity). Чтобы узнать точные правила видимости для объекта, мне нужно запустить некоторый код (то есть поиск ролей пользователя, разрешений, групп и т. Д.). Я хотел бы выполнить запросы, которые сообщают мне объекты, которые текущий пользователь имеет право видеть.

Я обнаружил, что фильтры гибернации дают вам возможность применить фильтр к вашим объектам / запросам, что, похоже, я мог бы использовать здесь.

Тем не менее, примеры, которые я нашел, похоже, сосредоточены на базе данных (то есть, у меня есть поле / столбец isVisible, фильтруйте всякий раз, когда для него установлено значение true). Есть ли способ, которым я могу запустить некоторый код в качестве фильтра гибернации, или это просто тонкий слой, который добавляет небольшое предложение WHERE для всех ваших запросов.

Я на самом деле использую это внутри инфраструктуры Grails / GORM, так что, возможно, есть и другие решения, которые являются действительными. Плагин существует , который интегрирует фильтры гибернации, но если я не смогу использовать его с некоторым кодом для запуска как часть процесса фильтрации гибернации, он мне здесь действительно не поможет.

1 Ответ

2 голосов
/ 05 ноября 2009

К сожалению, фильтры Hibernate не решат вашу проблему. Они могут быть очень полезны, но это точно тонкий слой, который добавляет небольшое предложение WHERE к каждой выборке.

Поскольку вы используете Grails, вы можете обнаружить, что AOP даст вам то, что вы ищете. Взгляните на это: http://www.infoq.com/articles/aop-with-groovy

Удачи.

...