c# - 如何创建使用角色名称实现的基于声明的授权系统?ASP.NET 核心 2.1
问题描述
在我的应用程序中,我已经将用户以及一些数据播种到我的应用程序中,但现在我正在尝试创建一个系统,我可以在其中为用户分配角色。我认为这可以通过使用 ASP.NET Identity 中的声明系统或使用角色名称的基于声明的授权系统来实现,我对采用哪种方法以及如何到达那里有点困惑。
目前我已经创建了一种播种用户和播种联系人的方法,但我读到了RoleManager<IdentityRole>
我认为正确的方法,但我又不确定。
public static class DbInit
{
public static void SeedDb(ApplicationDbContext context, UserManager<IdentityUser> userManager, RoleManager<IdentityRole> roleManager)
{
SeedPosts(context);
SeedUsers(userManager);
}
private static void SeedUsers(UserManager<IdentityUser> userManager)
{
IdentityUser user = new IdentityUser
{
UserName = "Member1@email.com",
Email = "Member1@email.com"
};
userManager.CreateAsync(user, "Password123!").Wait();
}
private static void SeedContacts(ApplicationDbContext context)
{
context.Database.EnsureCreated();
context.Contact.Add(
new Contact() { }
);
context.SaveChanges();
}
}
解决方案
要创建角色,请尝试
var userRole = await _roleManager.CreateAsync(new IdentityRole("User"));
要将声明分配给角色,请尝试
var role = await _roleManager.FindByNameAsync("User");
var roleClaims = await _roleManager.AddClaimAsync(role, new Claim("area", "public1"));
要为用户添加角色,请尝试
var user = await _userManager.FindByNameAsync(User.Identity.Name);
var roleToUser = await _userManager.AddToRoleAsync(user, "User");
看来你没有定义异步方法,你可以试试_userManager.AddToRoleAsync(user, "User").Wait()