Dans la gestion des utilisateurs et de leurs rôles, il est crucial de disposer d'un mécanisme permettant de récupérer les deux efficacement. Cet article explique comment accomplir cette tâche dans .NET Core 2.1 à l'aide d'Identity Framework.
Une approche courante consiste à modifier la classe ApplicationUser pour inclure une propriété Roles. Toutefois, cela n’est plus pris en charge dans .NET Core. Toute tentative d'utilisation de cette implémentation entraînera une erreur lors de la tentative d'inclusion de rôles dans la requête.
Pour surmonter ce problème, une table de relations personnalisée est requise. Cette table connectera les tables ApplicationUser et IdentityRole, nous permettant de récupérer les utilisateurs et leurs rôles associés.
Les entités suivantes définissent cette relation :
L'ApplicationDbContext doit être mis à jour pour gérer ces entités et leurs relations :
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, string> { protected override void OnModelCreating(ModelBuilder builder) { // Define the relationship between ApplicationUser and ApplicationUserRole builder.Entity<ApplicationUserRole>() .HasKey(ur => new { ur.UserId, ur.RoleId }); builder.Entity<ApplicationUserRole>() .HasOne(ur => ur.User) .WithMany(u => u.UserRoles) .HasForeignKey(ur => ur.UserId) .IsRequired(); builder.Entity<ApplicationUserRole>() .HasOne(ur => ur.Role) .WithMany(r => r.UserRoles) .HasForeignKey(ur => ur.RoleId) .IsRequired(); } }
Pour récupérer les utilisateurs et leurs rôles associés, le code suivant est ajouté au Razor Page :
public IActionResult OnGetAsync() { this.Users = userManager.Users .Include(u => u.UserRoles) .ThenInclude(ur => ur.Role) .ToList(); return Page(); }
La partie ".Include(u => u.UserRoles)" charge avec impatience les UserRoles pour chaque utilisateur. La partie ".ThenInclude(ur => ur.Role)" charge en outre avec impatience le rôle de chaque UserRole. Cela garantit que les utilisateurs et leurs rôles sont disponibles dans le modèle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!