如何创建使用角色名称实现的基于声明的授权系统? ASP.NET Core 2.1

时间:2019-01-05 12:48:17

标签: c# asp.net-core

在我的应用程序中,我已将用户以及一些数据播种到我的应用程序中,但是现在我试图创建一个可以在其中分配用户角色的系统。我认为这可以通过使用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();
    }
}

1 个答案:

答案 0 :(得分:1)

要创建角色,请尝试

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()

相关问题