2009-11-02 4 views
2

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

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

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

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

ответ

2

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

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

Удачи.