2009-11-05 5 views
2

Je suis en train de créer un mécanisme de sécurité complexe pour filtrer l'accès aux objets en fonction de divers droits.NHibernate include/exclude all

Dans le cadre de ce que je veux avoir un OR initiale dans ma requête qui exclut tous les résultats possibles de la requête avant que les autorisations permettent l'accès à certains sous-ensembles. Dans SQL, il ressemblerait à ceci:

select * 
from  Table 
where (1 = 0) 
or  (/* various predicates */) 

Cependant, je ne suis pas sûr de savoir comment créer cette 1 = 0 initiale via l'API de critères. Je vais probablement besoin de créer 1 = 1 à un moment donné, mais je suppose que ce sera une tâche similaire.

Comment faire?

+0

pensée initiale est que je pourrais avoir à mettre en œuvre mon critère je regarde maintenant. –

+0

Vous voudrez peut-être regarder dans Rhino Security, il semble couvrir ce que vous essayez d'atteindre. http://github.com/ayende/rhino-security – BennyM

+0

Oui, nous avons utilisé cela comme source d'inspiration, mais nous avons besoin de quelque chose de suffisamment différent pour écrire le sien. –

Répondre

1

Tuna Toksoz a suggéré cette méthode qui est simple et claire:

var stuff = session.CreateCriteria<Stuff>() 
    .Add(Restrictions.Eq(Projections.Constant(1), 0)) 
    .List<Stuff>(); 
+0

mais si vous ajoutez plus de critères avec Add(), ils seront effectivement ET avec le 1 = 0 –

+0

Oui, mais vous l'utiliseriez avec une disjonction ou similaire. Je ne fais que démontrer la technique pour atteindre un critère qui élimine tous les résultats. –