在.NET Core 2.1中获取所有用户及其关联角色的MySQL指南

在.NET Core 2.1中获取所有用户及其关联角色的MySQL指南

在使用MySQL和.NET Core 2.1的Identity时,您可能需要获取所有已注册用户及其对应的角色。 这在开发需要访问整个系统用户的管理控制台时非常有用。 下面是如何在.NET Core中使用MySQL进行此操作的指南。

阅读更多:MySQL 教程

添加所需的依赖项和包

首先,您需要将以下包添加到您的项目中:

  • MySql.Data.EntityFrameworkCore (用于MySQL与.NET Core的集成)
  • Microsoft.AspNetCore.Identity.EntityFrameworkCore (用于.NET Core Identity)

打开您的项目文件并添加这些包的引用,如下所示:

<ItemGroup>
    <PackageReference Include="MySql.Data.EntityFrameworkCore" Version="8.0.21" />
    <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="2.2.0" />
</ItemGroup>

创建用户和角色模型

您需要为用户和角色创建模型。这些模型将与数据库表关联。 下面是一个用户模型示例:

public class ApplicationUser : IdentityUser
{
    //User additional properties
}

注意,ApplicationUser 继承 IdentityUser类。 这意味着您可以在用户模型中使用 IdentityUser 内置的属性,例如用户名和电子邮件属性。

接下来,您将创建角色模型,如下所示:

public class ApplicationUserRole : IdentityUserRole<string>
{
    //This model can be empty since it's just a mapping between different tables
}

此模型包含在用户和角色之间建立关系所需的信息。

上下文模型

接下来,您需要创建上下文模型。这将包含用户和角色的所有表格,并将使您能够查询它们。 下面是示例:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser, IdentityRole<string>, string, IdentityUserClaim<string>, ApplicationUserRole,
                    IdentityUserLogin<string>, IdentityRoleClaim<string>, IdentityUserToken<string>>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        builder.Entity<ApplicationUser>().ToTable("AspNetUsers");
        builder.Entity<IdentityRole<string>>().ToTable("AspNetRoles");
        builder.Entity<IdentityUserRole<string>>().ToTable("AspNetUserRoles");
        builder.Entity<IdentityUserLogin<string>>().ToTable("AspNetUserLogins");
        builder.Entity<IdentityUserToken<string>>().ToTable("AspNetUserTokens");
        builder.Entity<IdentityUserClaim<string>>().ToTable("AspNetUserClaims");
        builder.Entity<IdentityRoleClaim<string>>().ToTable("AspNetRoleClaims");

        builder.Entity<IdentityUserRole<string>>(userRole =>
        {
            userRole.HasKey(ur => new { ur.UserId, ur.RoleId });

            userRole.HasOne(ur => ur.Role)
                .WithMany(r => r.UserRoles)
                .HasForeignKey(ur => ur.RoleId)
                .IsRequired();

            userRole.HasOne(ur => ur.User)
                .WithMany(r => r.UserRoles)
                .HasForeignKey(ur => ur.UserId)
                .IsRequired();

        });
    }
}

上面的代码将表格命名为AspNetUsers、AspNetRoles、AspNetUserRoles等。 它还指定了如何定义用户和角色之间的关系。

控制器

有了上面的内容,您可以轻松地创建一个控制器来检索所有用户及其对应的角色。 下面是如何实现:

using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Threading.Tasks;

[ApiController]
[Route("[controller]")]
public class UserController : Controller
{
    private UserManager<ApplicationUser> _userManager;
    private RoleManager<IdentityRole<string>> _roleManager;

    public UserController(UserManager<ApplicationUser> userManager, RoleManager<IdentityRole<string>> roleManager)
    {
        _userManager = userManager;
        _roleManager = roleManager;
    }

    [HttpGet]
    public async Task<ActionResult<IEnumerable<UserViewModel>>> Get()
    {
        var users = await _userManager.Users.ToListAsync();
        var userViewModels = new List<UserViewModel>();

        foreach (var user in users)
        {
            var userRoles = await _userManager.GetRolesAsync(user);
            userViewModels.Add(new UserViewModel{
                Id = user.Id,
                UserName = user.UserName,
                Email = user.Email,
                Roles = userRoles
            });
        }

        return Ok(userViewModels);
    }
}

public class UserViewModel
{
    public string Id { get; set; }
    public string UserName { get; set; }
    public string Email { get; set; }
    public IEnumerable<string> Roles { get; set; }
}

上面的代码将在请求到达时检索所有用户,并为每个用户检索其角色。最后,该控制器将返回一个带有用户详细信息和其角色的列表。

总结

通过上述步骤,您可以轻松地检索所有相关用户及其角色。此外,还可以使用此方法检索在数据库中保留的其他用户详细信息。在使用.NET Core 2.1和MySQL时,这是一个非常有用的技巧,可以将其用于开发带有管理员控制台的任何Web应用程序。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程