Asp.Net core MVC6如何在Identity 3中初始添加角色
Posted
技术标签:
【中文标题】Asp.Net core MVC6如何在Identity 3中初始添加角色【英文标题】:Asp.Net core MVC6 How to initially add roles in Identity 3 【发布时间】:2016-08-16 21:32:02 【问题描述】:我在 *** 中寻找过这个,到目前为止,似乎有很多关于在 Identity 1 和 2 中添加角色的问题,但在 Identity 3 中却有所不同。
我想在数据库中播种角色。我只有两个。我打算使用已注入课程的 _roleManager。没关系。我的问题是.. 似乎没有任何方法可以实际添加角色.. 使用 CreateAsync 是为了将用户添加到角色中.. 你如何编写代码以使用“_userManager”添加角色或者你必须这样做另一种方式?
【问题讨论】:
_roleManager
用于创建角色,_userManager
用于将用户添加到角色。我已经发布了帮助的答案
我有你可能感兴趣的a project here,它实现了身份3的多租户用户和角色管理
【参考方案1】:
编辑
身份
在 Identity
中,RoleManager
用于创建角色,UserManager
用于将用户添加到角色。
这是一个为您指明正确方向的示例。以下代码用于创建新角色Administrator
if (!roleManager.RoleExists("Administrator"))
MyIdentityRole newRole = new MyIdentityRole("Administrator", "Administrators can do something with data");
roleManager.Create(newRole);
编辑
此外,这是用于将用户添加到角色,这也是一个示例:
\\assuming you test if the user has been assigned to the role "Administrator" before adding them to that role
if(RoleAdministrator == true)
userManager.AddToRole(User.Id, "Administrator");
【讨论】:
我在过去一个小时左右一直在玩这个,它出现在 Identity 3 中,rolemanager 没有 create... 或任何可以创建角色的方法。我数了 22 种方法角色管理器... 好奇:为什么对 Identity 3 使用不同的方法? RoleManager 仍然存在,显然是管理角色的推荐方法。 @si2030 roleManager 应该有create
方法。你可以在这里找到它msdn.microsoft.com/en-us/library/dn613286(v=vs.108).aspx
在 Identity Core 中它将是 createAsync
。 docs.asp.net/projects/api/en/latest/autoapi/Microsoft/…
你不需要检查角色是否存在。它是RoleValidator
中默认模型的一部分。 var newRole = new ApplicationRole Name = model.RoleName, Description = model.RoleDescription ; var result = await roleManager.CreateAsync(newRole); if (result.Succeeded) // do something else // do something else - error will be in result.errors foreach (var error in result.Errors) // do something with error
【参考方案2】:
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 core MVC6如何在Identity 3中初始添加角色的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core 2.0/Razor Pages - 如何在请求之间将数据保存在 NonFactors MVC6 网格中?
在 ASP.NET Core MVC6 中将文件和模型发布到控制器
微软ASP.NET 电商网站开发实战 MVC6 +HTML5 +WCF+WebAPI+NoSQL+mongoDB+Redis+Core视频 代码 面试题
在 asp .net CORE / MVC 6 应用程序中设置 Swagger 时出现 500 错误