种子角色(RoleManager vs RoleStore)



通过查看这里的帖子,我看到了两种不同的创建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));
     }
}

RoleManagerRoleStore的包装器,因此当您向管理器添加角色时,实际上是将它们插入存储中,但这里的区别是RoleManager可以实现自定义IIdentityValidator<TRole> 角色验证器

因此,实现验证器时,每次通过管理器添加角色时,在将其添加到存储之前,将首先对其进行验证。

相关内容

  • 没有找到相关文章

最新更新