【问题标题】:How to add Admin role ( My solution )如何添加管理员角色(我的解决方案)
【发布时间】:2016-08-27 13:27:24
【问题描述】:

我找不到任何可行的解决方案...我尝试了所有谷歌结果。 我为此纠结了几个小时。

所以我只是将我的新角色插入到 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 )

我认为它太丑了,而且我能做的真的很糟糕,但它确实有效。

在 SO 上是一个标记为解决方案的答案: Asp.Net core MVC6 How to initially add roles in Identity 3

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

我什至不相信这真的那么难。我想我只是错过了一些线索。

【问题讨论】:

    标签: asp.net asp.net-core asp.net-identity asp.net-core-1.0


    【解决方案1】:

    通常管理员角色在创建架构时被植入数据库。您正在使用 Identity 创建或播种 管理员角色。 Identity 使用 Code-First 方法,以便您可以尽可能地对其进行自定义。不要手动使用 SQL 查询。以下是您可以使用 DI 在运行时创建具有管理员权限数据的 Admin User 的方法,因为 EFCore 尚不支持对播种数据的内置支持(它将在更新中支持)。 p>

    要种子数据,在数据文件夹中创建一个类(例如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");
            }
        }
    }
    

    然后在Startup.cs类中,在DI容器中注册这个服务为:

        public void ConfigureServices(IServiceCollection services)
        {
            ....
            services.AddTransient<AdministratorSeedData>();
        }
    

        public async void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, AdministratorSeedData seeder)
        {
            ....
            await seeder.EnsureSeedDataAsync();
        }
    

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

    【讨论】:

      猜你喜欢
      • 2020-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多