首次启动数据库时向管理员添加声明

问题描述 投票:0回答:1

首次启动数据库时必须添加管理员帐户。 我添加了名为“admin”的用户,但不知道如何向其附加声明。

应用程序DbContext:

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

        var hasher = new PasswordHasher<User>();
        modelBuilder.Entity<User>().HasData(
            new User 
            {
                UserName = "admin",
                PasswordHash = hasher.HashPassword(null!, "admin"),
       
                FirstName = "FirstName",
                LastName = "LastName",
                NormalizedUserName = "admin".ToUpper(),
                Email = "[email protected]",
                NormalizedEmail = "[email protected]".ToUpper(),
                EmailConfirmed = true
            });
    }
...

我可以手动向 IdentityUserClaims 添加声明。但随后我需要以某种方式将该声明附加到创建的用户。我可以使用 IdentityUserClaims 中的 UserId,但 UserId 是自动生成的。当我使用 UserManager 添加声明时,它看起来像“e23cfc12-22b0-4f3a-9229-a4d606f3ecf0”。因此,手动附加声明并不是一个好主意。

modelBuilder.Entity<IdentityUserClaim<string>>().HasData(
            new IdentityUserClaim<string>
            {
                Id = 1,
                UserId = "??????",
                ClaimType = ClaimTypes.Role,
                ClaimValue = "admin"
            },
asp.net-core entity-framework-core asp.net-identity claims-based-identity
1个回答
0
投票

所以当您创建用户时只需添加 Id

            modelBuilder.Entity<IdentityUser>().HasData(
                new IdentityUser
                {
                    Id= "e23cfc12-22b0-4f3a-9229-a4d606f3ecf0",
                    UserName = "admin",
                    ...

然后您可以在创建 IdentityUserClaim 时使用此 Id 作为 UserId

            modelBuilder.Entity<IdentityUserClaim<string>>().HasData(
            new IdentityUserClaim<string>
            {
                Id = 1,
                UserId = "e23cfc12-22b0-4f3a-9229-a4d606f3ecf0",
                ...
© www.soinside.com 2019 - 2024. All rights reserved.