J'ai le code suivant. Mais il doit exister un moyen plus efficace de faire cela, car corrigez-moi si je me trompe, le nombre de requêtes à la base de données est égal à (1 + (nombre d'utilisateurs avec un rôle d'administrateur)).
Avec un nouveau projet MVC 4, les valeurs par défaut d'appartenance sont les tables UserProfile, webpages_Roles et webpages_UsersInRoles. Je vois beaucoup de méthodes intégrées pour Roles.Get *. Si je veux éviter d'écrire du code comme celui décrit ci-dessous, dois-je créer explicitement un modèle pour webpages_Roles et webpages_UsersInRoles ainsi que toutes les propriétés du code en premier? Obtenir uniquement le nom d’utilisateur de Roles.Get * ne suffit pas, j’ai besoin du profil complet de l’utilisateur.
FYI l'objet "UserRole" ci-dessous est juste un enum
public ActionResult Admins()
{
var dbContext = new UsersContext();
var usernames = Roles.GetUsersInRole(UserRole.SiteAdministrator.ToString());
var adminUsers = new List<UserProfile>();
foreach (string username in usernames)
{
var adminUser = dbContext.UserProfiles.FirstOrDefault(u => u.UserName.ToLower() == username);
adminUser.Roles.Add(UserRole.SiteAdministrator);
adminUsers.Add(adminUser);
}
return View(adminUsers);
}
Oui, vous ne voulez pas le faire de cette façon. C'est une manière très inefficace.
Utilisez plutôt les outils tels qu'ils ont été conçus. Par exemple, quelque chose comme ceci:
var usernames = Roles.GetUsersInRole(UserRole.SiteAdministrator.ToString());
var adminUsers = dbContext.UserProfiles
.Where(x => usernames.Contains(x.Username)).ToList();
return View(adminUsers);