#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-идентификация #entity-framework-миграции
Вопрос:
Просматривая сообщения здесь, я увидел два разных способа создания ASP.NET Роли идентификации посредством заполнения Entity Framework. Один способ использует 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));
}
}
Ответ №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));
}
}
RoleManager
Это оболочка поверх RoleStore
, поэтому, когда вы добавляете роли в manager, вы фактически вставляете их в хранилище, но разница здесь в том, что RoleManager
можно реализовать пользовательский IIdentityValidator<TRole>
механизм проверки роли.
Итак, внедряя средство проверки, каждый раз, когда вы добавляете роль через manager, она сначала будет проверена перед добавлением в хранилище.