Проверка того, является ли пользователь роли в asp.net mvc Identity
У меня проблема с загрузкой моей базы данных пользователями и ролями.
Пользователь и роль создаются (я вижу их в базе данных после ошибки).
Однако, когда я пытаюсь проверить, является ли пользователь в роли, я получаю исключение.
Мой код:
public class tbInitializer<T> : DropCreateDatabaseAlways<tbContext>
{
protected override void Seed(tbContext context)
{
ApplicationDbContext userscontext = new ApplicationDbContext();
var userStore = new UserStore<ApplicationUser>(userscontext);
var userManager = new UserManager<ApplicationUser>(userStore);
var roleStore = new RoleStore<IdentityRole>(userscontext);
var roleManager = new RoleManager<IdentityRole>(roleStore);
if(!userscontext.Users.Any(x=> x.UserName=="marktest"))
{
var user = new ApplicationUser { UserName = "marktest", Email = "[email protected]" };
userManager.Create(user, "Pa$$W0rD!");
}
if (!roleManager.RoleExists("Admin"))
{
roleManager.Create(new IdentityRole("Admin"));
}
if(!userManager.IsInRole("marktest","Admin"))
{
userManager.AddToRole("marktest","Admin");
}
Однако на строке:
if(!userManager.IsInRole("marktest","Admin"))
Исключение генерируется с ошибкой: UserId not found.
Пользователь и роль находятся в базе данных, когда я проверяю после исключения:
![Shows User Added to DB]()
![Shows Role Added to DB]()
Может ли кто-нибудь увидеть, что я делаю неправильно?
Спасибо за любую помощь,
Марк
Ответы
Ответ 1
Я выяснил решение, если у кого-то еще есть эта проблема.
"IsInRole" ожидает строку User.Id - not UserName - поэтому я изменил на:
if (!userManager.IsInRole(user.Id, "Admin"))
{
userManager.AddToRole(user.Id, "Admin");
}
Таким образом, рабочий код будет выглядеть следующим образом:
ApplicationDbContext userscontext = new ApplicationDbContext();
var userStore = new UserStore<ApplicationUser>(userscontext);
var userManager = new UserManager<ApplicationUser>(userStore);
var roleStore = new RoleStore<IdentityRole>(userscontext);
var roleManager = new RoleManager<IdentityRole>(roleStore);
// Create Role
if (!roleManager.RoleExists("Admin"))
{
roleManager.Create(new IdentityRole("Admin"));
}
if(!userscontext.Users.Any(x=> x.UserName=="marktest"))
{
// Create User
var user = new ApplicationUser { UserName = "marktest", Email = "[email protected]" };
userManager.Create(user, "Pa$$W0rD!");
// Add User To Role
if (!userManager.IsInRole(user.Id, "Admin"))
{
userManager.AddToRole(user.Id, "Admin");
}
}
Я надеюсь, что это поможет,
Марк
Ответ 2
Простейшая вещь в жизни;
bool isAdmin= User.IsInRole("admin")