Динамическое добавление ролей в новом VS 2013 Identity UserManager

Я создал новое приложение MVC в новой среде VS2013. Я добавил следующее в "Действие входа" на AccountController, поскольку хотел динамически создать пользователя по умолчанию:

var admin = new ApplicationUser() { UserName = "administrator" };
var result = UserManager.Create(admin, "administrator");

Это прекрасно работает, затем я хотел поместить этого пользователя по умолчанию в новую роль по умолчанию:

user = UserManager.FindByName("administrator");
var roleresult = UserManager.AddToRole(user.Id,"admin");

Ошибка второй строки, потому что очевидно, что она не может найти роль "администратор", поскольку она еще не существует, но я не могу найти соответствующий метод в UserManager для этого. Где найти способ динамического добавления ролей?

1 ответ

Решение

Вот как я это сделал. У меня есть словарь userRoles с предварительно авторизованными парами ключ-значение {userName, role}:

private void setRoles()
{
    using(var rm = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext())))
    using(var um = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
        foreach (var item in userRoles)
        {
            if (!rm.RoleExists(item.Value))
            {
                var roleResult = rm.Create(new IdentityRole(item.Value));
                if (!roleResult.Succeeded)
                    throw new ApplicationException("Creating role " + item.Value + "failed with error(s): " + roleResult.Errors);
            }
            var user = um.FindByName(item.Key);
            if (!um.IsInRole(user.Id, item.Value))
            {
                var userResult = um.AddToRole(user.Id, item.Value);
                if (!userResult.Succeeded)
                    throw new ApplicationException("Adding user '" + item.Key + "' to '" + item.Value + "' role failed with error(s): " + userResult.Errors);
            }
        }
}
Другие вопросы по тегам