gpt4 book ai didi

asp.net-mvc - Asp.Net core MVC6如何在Identity 3中初始添加角色

转载 作者:行者123 更新时间:2023-12-04 11:49:26 29 4
gpt4 key购买 nike

我在 Stackoverflow 中寻找过这个,到目前为止,似乎有很多关于在 Identity 1 中添加角色的问题& 2但它在身份 3 中有所不同。

我想在数据库中播种角色。我只有两个。我打算使用已注入(inject)类(class)的 _roleManager。没关系。我的问题是.. 似乎没有任何方法可以实际添加角色.. 使用 CreateAsync 是为了将用户添加到角色中.. 你如何编写代码以使用“_userManager”添加角色或者你必须这样做其他方式?

最佳答案

public class SeedData
{
private const string _adminRoleName = "admin";
private string _adminEmail = "admin@demo.com";
private string _adminPassword = "P@ssw0rd!PK";

private string[] _roles = new string[] { _adminRoleName, "supervisor" };

private readonly RoleManager<IdentityRole<Guid>> _roleManager;
private readonly UserManager<ApplicationUser> _userManager;

public static async Task Run(IServiceProvider serviceProvider)
{
using (var serviceScope =serviceProvider
.GetRequiredService<IServiceScopeFactory>()
.CreateScope())
{
var instance = serviceScope.ServiceProvider.GetService<SeedData>();
await instance.Initialize();

var context = serviceScope.ServiceProvider.GetService<AppDbContext>();
if (!context.Products.Any())
{
// Seed Other entities Here
}

await context.SaveChangesAsync();
}
}

public SeedData(UserManager<ApplicationUser> userManager,
RoleManager<IdentityRole<Guid>> roleManager)
{
_roleManager = roleManager;
_userManager = userManager;
}

public async Task Initialize()
{
foreach (var role in _roles)
{
if (!await _roleManager.RoleExistsAsync(role))
{
await _roleManager.CreateAsync(new IdentityRole<Guid>(role));
}
}

var adminUsers = await _userManager.GetUsersInRoleAsync(_adminRoleName);
if (!adminUsers.Any())
{
var adminUser = new ApplicationUser()
{
Id = Guid.NewGuid(),
Email = _adminEmail,
UserName = _adminEmail
};

var result = await _userManager.CreateAsync(adminUser, _adminPassword);
if(result.Success)
{
await _userManager.AddToRoleAsync(adminUser, _adminRoleName);
}
}
}
}

在您的 Program.cs
public static void Main(string[] args)
{
var host = BuildWebHost(args);

using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
SeedData.Run(services).Wait();
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "Error while seeding database.");
}
}

host.Run();
}

可能对某人有帮助:)

关于asp.net-mvc - Asp.Net core MVC6如何在Identity 3中初始添加角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36807591/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com