2011-03-16 2 views
5

Existe-t-il un moyen raisonnablement efficace d'obtenir une liste d'utilisateurs qui ne sont pas dans un rôle spécifique?Comment faire en sorte que les utilisateurs ne jouent pas de rôle,

Les seules méthodes que je peux voir sont

  1. Obtenez tous les utilisateurs de DB et faire une vérification dans le code

  2. Aller directement à la db et SIDESTEP le fournisseur de rôle

+0

Vous souhaitez fournir des informations sur la structure de la base de données? – Aidiakapi

+0

@Aidiakapi, la structure est fixe. Cela fait partie du cadre. –

+0

Je sais qu'il y en a un, mais je pensais que c'était personnalisable. – Aidiakapi

Répondre

2

Je ne pense pas qu'il y ait quelque chose de mal à contourner le fournisseur de rôle et d'interroger directement la base de données. Vous obtiendrez certainement la meilleure performance de cette façon.

+0

D'accord, au fond ce que vous voulez est un Sprok qui fait cela 'SELECT * FROM utilisateurs u OÙ EXISTE PAS ( SELECT 1 DE UsersInRoles ur OÙ ur.RoleId = '8E79BA23-E568-423F-80F3-AF60C33DC7EB' ET ur.UserId = u.UserID ) ' – MvcCmsJon

4

Une autre méthode consiste à étendre RoleProvider avec la méthode GetUsersNotInRole() et interroger la base de données à cet endroit. Vous pouvez également combiner RoleProvider.GetUsersInRole() avec MembershipProvider.GetAllUsers() et trouver la différence

4

Vous pouvez simplement obtenir la liste de tous les utilisateurs et les utilisateurs extrait dans le rôle spécifié dans la liste:

var usersInRole = Roles.GetUsersInRole("admin"); 
var users = Membership.GetAllUsers() 
    .Cast<MembershipUser>() 
    .Select(u => 
     !usersInRole.Contains(u.UserName) 
    ); 
4

Modification de la Sélectionnez à Où dans le code fourni par Alex retournera réellement les résultats au lieu de juste vrai/faux.

var usersInRole = Roles.GetUsersInRole("admin"); 
var users = Membership.GetAllUsers() 
    .Cast<MembershipUser>() 
    .Where(u => 
     !usersInRole.Contains(u.UserName) 
    ); 
1

Trouvé de cette façon, espérons que cela aide les autres aussi. Très facile.

var usernames = Roles.GetUsersInRole("Administrator"); 

      var adminUsers = db.UserProfiles 
       .Where(x => !usernames.Contains(x.UserName)).ToList(); 
      return View(adminUsers); 
Questions connexes