j'ai un modèle simple pour la sécurité où il y a:plusieurs entités beaucoup à de nombreuses requêtes
- utilisateurs
- Rôles
- chemins
et beaucoup de nombreux liens entre ces tables , donc un utilisateur à des rôles, et des rôles à des chemins. J'essaye d'écrire une fonction de sorte que d'un nom d'utilisateur et d'un chemin il renverra une valeur booléenne selon si l'utilisateur a accès à ce chemin. Comment puis-je faire cela avec le framework d'entité? J'ai actuellement:
var rolesForUser = _entities.Users
.Include("Roles")
.Where(u => u.Login.Equals(username))
.Select(u => u.Roles);
if(rolesForUser.Count() == 0) return false;
var authentications = _entities.WebPaths
.Where(p => p.Path == path)
.WhereIn(p => p.Roles, rolesForUser);
return (authentications.Count() > 0);
qui utilise une méthode d'extension WhereIn, mais cela ne peut comparer sur primatives si cela ne fonctionne pas pour le moment. Toutes les suggestions sont les bienvenues
Salut Craig, vient d'avoir un aller avec cela et sur la ligne: « prédicat = predicate.Or (p => p.roles.Any (r => r.Id == role.Id)); " Je ne suis pas en mesure d'accéder à role.Id car le rôle est un objet System.Data.Objects.DataClasses.EntityCollection plutôt que System.Data.Objects.ObjectQuery. Je suppose que cela est dû à la façon dont je sélectionne dans rolesForUser, bien que je ne sois pas sûr de savoir comment le faire revenir. –
bobwah
Quel est le type * exact * (avec les paramètres) de 'rolesForUser'? –
(variable locale) IQueryable> rolesForUser –
bobwah