6

我在新的 VS2013 IDE 中创建了一个新的 MVC 应用程序。我在 AccountController 上的登录操作中添加了以下内容,因为我想动态创建一个默认用户:

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

这很好用,然后我想将此默认用户放入一个新的默认角色中:

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

第二行错误,因为它显然找不到角色“admin”,因为它还不存在,但我在 UserManager 上找不到相关的方法来这样做。在哪里可以找到动态添加角色的方法?

4

1 回答 1

16

这是我的做法。我有一个带有预授权 {userName, role} 键值对的字典 use​​rRoles :

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);
            }
        }
}
于 2013-10-23T20:17:11.647 回答