Asp.net 如何添加管理员角色(我的解决方案)

Asp.net 如何添加管理员角色(我的解决方案),asp.net,asp.net-core,asp.net-identity,asp.net-core-1.0,Asp.net,Asp.net Core,Asp.net Identity,Asp.net Core 1.0,我找不到任何有效的解决方案。。。我尝试了谷歌的每一个结果。 我和这个争吵了几个小时 因此,我只需将我的新角色插入到SQL表中: insert into [dbo].[AspNetRoles] ( [Id] ,[ConcurrencyStamp] ,[Name] ,[NormalizedName] ) values(1,NULL,'Admin','Admin') ; Insert into [dbo].[AspNetUserRoles] ( [UserId]

我找不到任何有效的解决方案。。。我尝试了谷歌的每一个结果。 我和这个争吵了几个小时

因此,我只需将我的新角色插入到SQL表中:

insert into [dbo].[AspNetRoles] ( [Id]
      ,[ConcurrencyStamp]
      ,[Name]
      ,[NormalizedName] )
values(1,NULL,'Admin','Admin') ;

Insert into [dbo].[AspNetUserRoles] (  [UserId]
      ,[RoleId] )
VALUES('user_id_from_[dbo].[AspNetUsers]' , 1 )
我认为这是如此丑陋,真的是我能做的最糟糕的,但它的工作

因此,有一个答案被标记为解决方案:

但在谷歌上寻找答案之后,我真的不知道如何在Startup.cs中正确初始化roleManager


我甚至不相信这真的有那么难。我想我只是遗漏了一些线索。

通常在创建模式时,管理员角色被植入数据库。您正在使用Identity创建或设置管理员角色的种子。Identity使用代码优先的方法,因此您可以尽可能地对其进行自定义。不要手动使用SQL查询。下面是使用DI在运行时创建具有管理员权限数据的管理员用户的方法,因为EFCore还不支持内置的种子数据支持(它将在更新中支持)

要为数据设定种子,请在数据文件夹中创建一个类(例如AdministratorSeedData.cs),并添加以下代码

public class AdministratorSeedData
{
    private RoleManager<IdentityRole> _roleManager;
    private UserManager<ApplicationUser> _userManager;

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

    public async Task EnsureSeedDataAsync()
    {
        if (await _userManager.FindByEmailAsync("someone@someone.com") == null)
        {
            ApplicationUser administrator = new ApplicationUser()
            {
                UserName = "someone@someone.com",
                Email = "someone@someone.com"
            };

            await _userManager.CreateAsync(administrator, "Passw0rd123!");
            await _roleManager.CreateAsync(new IdentityRole("Administrator"));

            IdentityResult result = await _userManager.AddToRoleAsync(administrator, "Administrator");
        }
    }
}

确保没有创建任何数据库。运行应用程序,您将看到具有管理员角色的用户已成功创建

    public void ConfigureServices(IServiceCollection services)
    {
        ....
        services.AddTransient<AdministratorSeedData>();
    }
    public async void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, AdministratorSeedData seeder)
    {
        ....
        await seeder.EnsureSeedDataAsync();
    }