Asp.net 如何添加管理员角色(我的解决方案)
我找不到任何有效的解决方案。。。我尝试了谷歌的每一个结果。 我和这个争吵了几个小时 因此,我只需将我的新角色插入到SQL表中:Asp.net 如何添加管理员角色(我的解决方案),asp.net,asp.net-core,asp.net-identity,asp.net-core-1.0,Asp.net,Asp.net Core,Asp.net Identity,Asp.net Core 1.0,我找不到任何有效的解决方案。。。我尝试了谷歌的每一个结果。 我和这个争吵了几个小时 因此,我只需将我的新角色插入到SQL表中: insert into [dbo].[AspNetRoles] ( [Id] ,[ConcurrencyStamp] ,[Name] ,[NormalizedName] ) values(1,NULL,'Admin','Admin') ; Insert into [dbo].[AspNetUserRoles] ( [UserId]
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 )
我认为这是如此丑陋,真的是我能做的最糟糕的,但它的工作
因此,有一个答案被标记为解决方案:
但在谷歌上寻找答案之后,我真的不知道如何在Startup.cs中正确初始化roleManager
我甚至不相信这真的有那么难。我想我只是遗漏了一些线索。通常在创建模式时,管理员角色被植入数据库。您正在使用Identity创建或设置管理员角色的种子。Identity使用代码优先的方法,因此您可以尽可能地对其进行自定义。不要手动使用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("someone@someone.com") == null)
{
ApplicationUser administrator = new ApplicationUser()
{
UserName = "someone@someone.com",
Email = "someone@someone.com"
};
await _userManager.CreateAsync(administrator, "Passw0rd123!");
await _roleManager.CreateAsync(new IdentityRole("Administrator"));
IdentityResult result = await _userManager.AddToRoleAsync(administrator, "Administrator");
}
}
}
及
确保没有创建任何数据库。运行应用程序,您将看到具有管理员角色的用户已成功创建
public void ConfigureServices(IServiceCollection services)
{
....
services.AddTransient<AdministratorSeedData>();
}
public async void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, AdministratorSeedData seeder)
{
....
await seeder.EnsureSeedDataAsync();
}