您可以通過在啓動類中創建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");
}
}
}
,然後你可以調用從啓動類的Configure
方法await CreateRoles(serviceProvider);
方法。 確保你有IServiceProvider
作爲Configure
類中的參數
看起來像它!我會盡量在回家時實現它,只要我在代碼中測試它,我會將其標記爲「已回答」。關於「我在哪裏放置代碼」:我認爲我應該在'Startup.cs'的'Configure'方法的末尾調用它? –
謝謝,澤維爾。是的,你可以在'Configure'方法的末尾調用它。在配置路由之後。 –
就是這樣,非常感謝。標記爲已回答。簡單點說一下,因爲有些步驟對我來說不是微不足道的(以防它可以幫助其他人):爲了從'Configure'方法的底部調用你的函數,我這樣做了:'var serviceProvider = app.ApplicationServices.GetService(); CreateRoles(的ServiceProvider).Wait();'。 –