2016-08-27 11 views
2

解決方法が見つかりません...すべてのGoogleの結果を試しました。 私は数時間このことを理解しています。管理者ロール(私のソリューション)を追加する方法

だから、僕はと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オン

は解決策としてマークされた1つの答えです: Asp.Net core MVC6 How to initially add roles in Identity 3

が、私は本当にきちんとStartup.csにroleManagerを初期化する方法をグーグルで答えを探した後、見当がつかない。

私はそれが本当に難しいとは思わない。私はちょっと手がかりがないと思う。

答えて

5

通常、管理者ロールは、スキーマの作成中にデータベースにシードされます。 IDを使用して管理者ロールを作成またはシードしています。 IDはCode-Firstアプローチを使用して、可能な限りカスタマイズすることができます。 SQLクエリを手動で使用しないでください。以下は、EFCoreがまだSeedingデータのサポートをサポートしていないため(アップデートでサポートされるため)、DIを使用して管理者ユーザを実行時に作成する方法です。

データをシードするには、データフォルダにクラス(AdministratorSeedData.csなど)を作成し、次のコードを追加します。

Startup.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"); 
     } 
    } 
} 

、としてDIコンテナにこのサービスを登録します。

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

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

が作成した何のデータベースが存在しないことを確認します。アプリケーションを実行すると、「管理者ロールを持つユーザー」が正常に作成されたことがわかります。

関連する問題