Xav*_*eña 10 c# asp.net .net-core asp.net-core
我找到了这个答案,但它似乎不适合我的ASP Net Core项目.
我想要了解的事情:
aspnetroles),但我不知道该用什么作为Id和ConcurrencyStamp.Startup?在Register下面AccountController?user2role或aspnetusers.role_id).Tem*_*oke 22
您可以通过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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以await CreateRoles(serviceProvider);从ConfigureStartup类中的方法调用该方法.确保您拥有该类中IServiceProvider的参数Configure.
编辑:如果您使用的是ASP.NET核心2.x,我的文章提供了非常详细的体验. 这里
除了temi的详细回答,记得替换
services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<DbContext>();
Run Code Online (Sandbox Code Playgroud)
和
services.AddIdentity<IdentityUser, IdentityRole>().AddEntityFrameworkStores<DbContext>();
Run Code Online (Sandbox Code Playgroud)
另外,请确保中指定AddIdentity<>的类型与中调用的类型相同serviceProvider.GetRequiredService<>
对于上述情况,我们serviceProvider.GetRequiredService<>在 Configure.cs 中调用的类型将是
var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
var userManager = serviceProvider.GetRequiredService<UserManager<IdentityUser>>();
Run Code Online (Sandbox Code Playgroud)
另一件需要注意的重要事情是,由于CreateRoles(IServiceProvider)(来自 Temi 的回答)是一个异步方法,要在Configure方法中调用它(返回 void),您可以使用
CreateRoles(serviceProviderInstance).Wait();
Hope 这有帮助。
| 归档时间: |
|
| 查看次数: |
8261 次 |
| 最近记录: |