📅  最后修改于: 2023-12-03 14:39:21.900000             🧑  作者: Mango
ASP.NET Identity 是 ASP.NET Core 中用于身份验证和访问授权的框架。这个框架可用于管理用户,角色和其他实体,并定义他们之间的关系。在本文中,我们将探讨如何扩展 ASP.NET Identity 的关系和在 ASP.NET Core 中如何使用它。
首先,让我们看看如何添加自定义关系。默认情况下,ASP.NET Identity 支持用户和角色之间的关系,并且在 ASP.NET Core 中定义为 IdentityUserRole
, IdentityUserClaim
, IdentityUserLogin
, IdentityRoleClaim
和 IdentityUserToken
五个类。
如果要定义自定义关系,则需要创建一个新的实体类并将其关联到其中一个默认类上。这需要以下步骤:
创建一个新的实体类,例如 PersonRole
,它将包含用户和角色之间的关系。
public class PersonRole
{
public string UserId { get; set; }
public string RoleId { get; set; }
public IdentityUser User { get; set; }
public IdentityRole Role { get; set; }
}
将 PersonRole
类添加到应用程序的 DbContext
中。
public class ApplicationDbContext : IdentityDbContext
{
public DbSet<PersonRole> PersonRoles { get; set; }
}
通过对 ApplicationDbContext
进行自定义,将 PersonRole
类关联到默认的 ASP.NET Identity 类之一上,例如:
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
public DbSet<PersonRole> PersonRoles { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<PersonRole>()
.HasKey(pr => new { pr.UserId, pr.RoleId });
modelBuilder.Entity<PersonRole>()
.HasOne(pr => pr.User)
.WithMany(u => u.PersonRoles)
.HasForeignKey(pr => pr.UserId);
modelBuilder.Entity<PersonRole>()
.HasOne(pr => pr.Role)
.WithMany(r => r.PersonRoles)
.HasForeignKey(pr => pr.RoleId);
}
}
最后,在应用程序中使用新的 PersonRole
类。
public class SomeController : Controller
{
private readonly ApplicationDbContext _context;
public SomeController(ApplicationDbContext context)
{
_context = context;
}
public async Task<IActionResult> Index()
{
var personRoles = await _context.PersonRoles.ToListAsync();
// do something
}
}
现在,让我们看看如何在 ASP.NET Core 中使用扩展的 ASP.NET Identity。
首先,创建一个新的 ASP.NET Core Web 应用程序,启用身份验证,并将 ASP.NET Identity 添加到应用程序中。在 Startup.cs 文件中,可以找到此行代码以执行上述任务:
services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
现在,我们可以在 Controllers 和 Views 中使用 ASP.NET Identity,例如:
public class SomeController : Controller
{
private readonly UserManager<IdentityUser> _userManager;
private readonly SignInManager<IdentityUser> _signInManager;
public SomeController(
UserManager<IdentityUser> userManager,
SignInManager<IdentityUser> signInManager)
{
_userManager = userManager;
_signInManager = signInManager;
}
public async Task<IActionResult> Index()
{
var user = await _userManager.GetUserAsync(HttpContext.User);
// do something
}
}
@using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager
@if (SignInManager.IsSignedIn(User))
{
<p>Hello, @UserManager.GetUserName(User)</p>
}
else
{
<p>You are not signed in.</p>
}
ASP.NET Identity 提供了一种灵活的方法来管理 ASP.NET Core 应用程序中的身份验证和访问授权。通过使用自定义关系,我们可以扩展其功能,从而管理用户和角色之间的其他关系。在 ASP.NET Core 中,可以通过注入 UserManager
和 SignInManager
来访问和操作 ASP.NET Identity。
以上就是本文介绍的全部内容,希望对你理解和使用 ASP.NET Identity 有所帮助!