【问题标题】:Seed Roles (RoleManager vs RoleStore)种子角色(RoleManager 与 RoleStore)
【发布时间】:2017-03-04 04:16:22
【问题描述】:

通过查看此处的帖子,我看到了通过实体框架播种创建 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));
    }
}

【问题讨论】:

    标签: asp.net-mvc entity-framework asp.net-mvc-5 asp.net-identity entity-framework-migrations


    【解决方案1】:

    在您的具体情况下,使用这两种方法可以获得相同的结果。

    但是,正确的用法应该是:

    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 的包装器,因此当您向 ma​​nager 添加角色时,实际上是将它们插入到 store 中,但是这里的区别在于RoleManager 可以实现自定义IIdentityValidator&lt;TRole&gt; 角色验证器

    所以,实现validator,每次通过ma​​nager添加role,都会先被验证,然后再添加到商店

    【讨论】:

      猜你喜欢
      • 2019-07-27
      • 2019-04-12
      • 1970-01-01
      • 2021-04-09
      • 2016-10-08
      • 2013-10-17
      • 2015-06-14
      • 1970-01-01
      • 2018-08-10
      相关资源
      最近更新 更多