通过查看此处的帖子,我已经看到了通过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
答案 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));
}
}
RoleManager
是RoleStore
的包装,因此当您向经理添加角色时,实际上是将它们插入商店,但不同之处在于RoleManager
可以实现自定义IIdentityValidator<TRole>
角色验证器。
因此,实施验证器,每次通过经理添加角色时,首先会在添加到经理之前对其进行验证的存储即可。