2016-08-27 62 views
2

我找不到任何工作解決方案...我試過每一個谷歌的結果。 我幾個小時都在想這件事。如何添加管理員角色(我的解決方案)

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

我覺得它是那麼難看,真的最壞我可以做,但它的工作。

就這麼一個答案標記爲解決方案: Asp.Net core MVC6 How to initially add roles in Identity 3

,但我真的不知道尋找在谷歌的答案如何正確Startup.cs初始化roleManager後。

我甚至不相信這真的很難。我想我只是想念一些線索。

回答

5

通常管理員角色在創建模式時被播種到數據庫中。您正在使用Identity創建或播種管理員角色。 Identity使用Code-First方法,以便您可以儘可能自定義它。不要手動使用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("[email protected]") == null) 
     { 
      ApplicationUser administrator = new ApplicationUser() 
      { 
       UserName = "[email protected]", 
       Email = "[email protected]" 
      }; 

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

確保沒有創建的數據庫。運行該應用程序,您將看到具有管理員角色的用戶已成功創建。