2009-11-02 6 views
2

J'ai un mécanisme de sécurité assez sophistiqué que j'ai implémenté en utilisant Apache Shiro (anciennement JSecurity). Afin de connaître les règles de visibilité exactes pour un objet, j'ai besoin d'exécuter du code (c'est-à-dire les rôles de l'utilisateur de recherche, les permissions, les groupes, etc.). Je voudrais exécuter des requêtes qui me disent des objets que l'utilisateur actuel est autorisé à voir.Code d'exécution dans Hibernate Filtres

J'ai trouvé que les filtres d'hibernation vous donnent la possibilité d'appliquer un filtre à vos objets/requêtes, ce qui semble être ce que je pourrais utiliser ici.

Cependant, les exemples que j'ai trouvés semblent être centrés sur la base de données (c'est-à-dire que j'ai un champ/colonne isVisible, filtre quand il est défini sur true). Est-ce que je peux exécuter du code en tant que filtre d'hibernation, ou est-ce juste une couche mince qui ajoute une petite clause WHERE à toutes vos requêtes.

Je l'utilise actuellement dans l'infrastructure Grails/GORM, alors il y a peut-être d'autres solutions qui sont valides. Un plugin exists qui intègre les filtres hibernate, mais à moins que je ne puisse l'utiliser avec du code pour fonctionner dans le cadre du processus de filtrage d'hibernation, cela ne m'aidera pas vraiment ici.

Répondre

2

Malheureusement, les filtres Hibernate ne résoudront pas votre problème. Ils peuvent être très utiles, mais c'est exactement un thin layer qui ajoute une petite clause WHERE à chaque fetch.

Puisque vous utilisez Grails, vous pourriez trouver que AOP vous donnera ce que vous cherchez. Jetez un oeil à ceci: http://www.infoq.com/articles/aop-with-groovy

Bonne chance.