种子角色(RoleManager与RoleStore)

时间:2016-10-21 18:53:50

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

通过查看此处的帖子,我已经看到了通过Entity Framework种子创建ASP.NET身份角色的两种不同方法。一种方法使用from django.db import transaction def viewfunc(request): # This code executes in autocommit mode (Django's default). do_stuff() with transaction.atomic(): # This code executes inside a transaction. do_more_stuff() ,另一种方式使用RoleManager。我想知道两者之间是否存在差异。使用后者将避免少一次初始化

RoleStore

1 个答案:

答案 0 :(得分:2)

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

但是,正确用法将是:

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> 角色验证器

因此,实施验证器,每次通过经理添加角色时,首先会在添加到经理之前对其进行验证的存储即可。