【问题标题】:Adding Role dynamically in new VS 2013 Identity UserManager在新的 VS 2013 Identity UserManager 中动态添加角色
【发布时间】:2013-10-23 13:36:06
【问题描述】:

我在新的 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 上找不到相关的方法来这样做。在哪里可以找到动态添加角色的方法?

【问题讨论】:

    标签: asp.net identity visual-studio-2013 asp.net-roles


    【解决方案1】:

    这就是我的做法。我有一个带有预授权 {userName, role} 键值对的 Dictionary userRoles :

    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);
                }
            }
    }
    

    【讨论】:

    • 非常感谢。我需要的是 RoleManager。现在在控制器上定义角色有什么不同吗?
    • 不客气,user1166905。创建角色很简单,显示在“var roleResult = rm.Create(new IdentityRole(item.Value));”这一行
    • 谢谢我的意思是在控制器上定义它们,即 [Authorize(Roles="admin")] 但已经过测试并且是相同的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2022-11-23
    • 2013-11-11
    • 2016-11-09
    • 2016-07-25
    • 2021-10-12
    相关资源
    最近更新 更多