私は この答え を見つけましたが、私のASP Net Coreプロジェクトには適合しません。
私が理解しようとしていること:
aspnetroles
)を直接調べたこともありますが、Id
およびConcurrencyStamp
として何を使用するかわかりません。Startup
内? Register
のAccountController
の下user2role
またはaspnetusers.role_id
はありません)。これは、スタートアップクラスにCreateRoles
メソッドを作成することで簡単に実行できます。これは、役割が作成されているかどうかを確認するのに役立ち、作成されていない場合は作成します。アプリケーションの起動時。そのようです。
_private async Task CreateRoles(IServiceProvider serviceProvider)
{
//adding customs roles : Question 1
var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
var UserManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
string[] roleNames = { "Admin", "Manager", "Member" };
IdentityResult roleResult;
foreach (var roleName in roleNames)
{
var roleExist = await RoleManager.RoleExistsAsync(roleName);
if (!roleExist)
{
//create the roles and seed them to the database: Question 2
roleResult = await RoleManager.CreateAsync(new IdentityRole(roleName));
}
}
//Here you could create a super user who will maintain the web app
var poweruser = new ApplicationUser
{
UserName = Configuration["AppSettings:UserName"],
Email = Configuration["AppSettings:UserEmail"],
};
string userPWD = Configuration["AppSettings:UserPassword"];
var _user = await UserManager.FindByEmailAsync(Configuration["AppSettings:AdminUserEmail"]);
if(_user == null)
{
var createPowerUser = await UserManager.CreateAsync(poweruser, userPWD);
if (createPowerUser.Succeeded)
{
//here we tie the new user to the role : Question 3
await UserManager.AddToRoleAsync(poweruser, "Admin");
}
}
}
_
次に、StartupクラスのConfigure
メソッドからawait CreateRoles(serviceProvider);
メソッドを呼び出すことができます。 IServiceProvider
クラスのパラメーターとしてConfigure
があることを確認してください。
編集:ASP.NETコア2.xを使用している場合、ここでの記事は非常に詳細なエクスペリエンスを提供します。 ここ
Temiの詳細な回答に加えて、
services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<DbContext>();
と
services.AddIdentity<IdentityUser, IdentityRole>().AddEntityFrameworkStores<DbContext>();
また、AddIdentity<>
で指定されたタイプがserviceProvider.GetRequiredService<>
で呼び出されたタイプと同じであることを確認してください
上記の場合、Configure.csのserviceProvider.GetRequiredService<>
で呼び出されるタイプは次のようになります。
var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
var userManager = serviceProvider.GetRequiredService<UserManager<IdentityUser>>();
CreateRoles(IServiceProvider)
(Temiの回答から)は非同期メソッドなので、Configure
メソッド(voidを返す)で呼び出すには、CreateRoles(serviceProviderInstance).Wait();
を使用できることに注意してください。お役に立てれば。
Temiの回答 および Xavierのコメント に追加すると、これに関する私の経験は asp.net-core-2 を使用した場合とは少し異なりました。
これを機能させるには、IServiceProvider
メソッドのパラメーターとしてConfigure
を追加して、そのインスタンスを取得する必要がありました。
public void Configure(
IApplicationBuilder App,
IHostingEnvironment Env,
ILoggerFactory LoggerFactory,
IServiceProvider ServiceProvider
)
{
/* trimmed */
CreateRoles(ServiceProvider).Wait();
}