2015-03-04 5 views
0

Je dois implémenter une sécurité d'accès basée sur un modèle sur un système existant, pour empêcher les utilisateurs de charger/modifier les données d'autres utilisateurs. J'ai donc créé quelques interfaces à cette fin et fait que les classes de modèles les implémentent. J'ai une classe de référentiel de base qui appelle toutes les requêtes, donc je peux vérifier ces interfaces seulement dans un endroit et tout fonctionnera. Et c'est le cas, mais je ne suis pas sûr si j'ai cassé la fonctionnalité Future dans l'intervalle.NHibernate - LINQ Où() après Future() requête de déclenchement?

Donc, fondamentalement, la question est très simple, si j'appelle cette méthode d'extension après chaque appel Future(), va-t-elle déclencher la requête immédiatement (rompre le but du futur)? Est-ce que Where() ou casting à interface force Future à exécuter immédiatement?

internal static IEnumerable<TX> ApplyRestrictions<TX>(this IEnumerable<TX> results, IUnitOfWork uow) 
{ 
    if (typeof(IContextUser).IsAssignableFrom(typeof(TX))) 
    { 
     var currentUser = uow.UserRepository.FindCurrentUser(); 
     return results.Where(x => (x as IContextUser).User == currentUser); 
    } 
    if (typeof(IContextCompany).IsAssignableFrom(typeof(TX))) 
    { 
     var currentCompany = uow.CompanyRepository.FindCurrentCompany(); 
     return results.Where(x => (x as IContextCompany).Company == currentCompany); 
    } 

    return results; 
} 

Répondre

0

Nevermind, je viens de le tester avec Glimpse. Il ne PAS déclencher une requête immédiate, ce qui est génial.