通过查看这里的帖子,我看到了两种不同的创建ASP的方法。. NET身份角色通过实体框架播种。一种是用RoleManager
,另一种是用RoleStore
。我想知道这两者之间是否有区别。因为使用后者可以避免少初始化一次
string[] roles = { "Admin", "Moderator", "User" };
// Create Role through RoleManager
var roleStore = new RoleStore<IdentityRole>(context);
var manager = new RoleManager<IdentityRole>(roleStore);
foreach (string role in roles)
{
if (!context.Roles.Any(r => r.Name == role))
{
manager.Create(new IdentityRole(role));
}
// Create Role through RoleStore
var roleStore = new RoleStore<IdentityRole>(context);
foreach (string role in roles)
{
if (!context.Roles.Any(r => r.Name == role))
{
roleStore.CreateAsync(new IdentityRole(role));
}
}
在您的特定情况下,使用这两种方法可以获得相同的结果。
但是,正确的用法应该是:
var context = new ApplicationIdentityDbContext();
var roleStore = new RoleStore<IdentityRole>(context);
var roleManager = new RoleManager<IdentityRole>(roleStore);
string[] roles = { "Admin", "Moderator", "User" };
foreach (string role in roles)
{
if (!roleManager.RoleExists(role))
{
roleManager.Create(new IdentityRole(role));
}
}
RoleManager
是RoleStore
的包装器,因此当您向管理器添加角色时,实际上是将它们插入存储中,但这里的区别是RoleManager
可以实现自定义IIdentityValidator<TRole>
角色验证器。