Asp.net mvc 种子角色(RoleManager与RoleStore)
通过查看这里的帖子,我看到了通过实体框架种子创建ASP.NET身份角色的两种不同方法。一种方法使用Asp.net mvc 种子角色(RoleManager与RoleStore),asp.net-mvc,entity-framework,asp.net-mvc-5,asp.net-identity,entity-framework-migrations,Asp.net Mvc,Entity Framework,Asp.net Mvc 5,Asp.net Identity,Entity Framework Migrations,通过查看这里的帖子,我看到了通过实体框架种子创建ASP.NET身份角色的两种不同方法。一种方法使用rolemager,另一种方法使用RoleStore。我想知道这两者之间是否有区别。因为使用后者将避免少一次初始化 string[] roles = { "Admin", "Moderator", "User" }; // Create Role through RoleManager var roleStore = new RoleStore<IdentityRole>(conte
rolemager
,另一种方法使用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));
}
}
string[]角色={“管理员”、“版主”、“用户”};
//通过角色管理器创建角色
var roleStore=新roleStore(上下文);
var管理者=新的角色管理者(角色存储);
foreach(角色中的字符串角色)
{
if(!context.Roles.Any(r=>r.Name==role))
{
创建(新的IdentityRole(角色));
}
//通过RoleStore创建角色
var roleStore=新roleStore(上下文);
foreach(角色中的字符串角色)
{
if(!context.Roles.Any(r=>r.Name==role))
{
CreateAsync(新的IdentityRole(角色));
}
}
在您的特定情况下,使用这两种方法可以获得相同的结果
但是,正确的用法是:
var context=new ApplicationIdentityDbContext();
var roleStore=新roleStore(上下文);
var roleManager=新roleManager(roleStore);
字符串[]角色={“管理员”、“版主”、“用户”};
foreach(角色中的字符串角色)
{
如果(!roleManager.RoleExists(角色))
{
创建(新的IdentityRole(角色));
}
}
RoleManager
是RoleStore
上的包装器,因此当您向管理器添加角色时,实际上是将它们插入存储,但是这里的区别是RoleManager
可以实现自定义的IIdentityValidator
角色验证器。
因此,实现验证程序,每次通过管理器添加角色,都将首先对其进行验证,然后再将其添加到存储