ASP .NET MVC:如何更改用户的角色?

时间:2009-05-06 18:38:14

标签: c# asp.net-mvc

在我的应用中,我有管理员角色,这类用户可以更改用户(客户端,经理......)的角色。我正在使用内置的会员提供商。这是我试图做的......

        [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult EditRole(string usernameID, FormCollection formValues)
    {

        var db = new AppDataContext();
        var user = db.Users.SingleOrDefault(d => d.UserName == usernameID);
        string choosenRole = Request.Form["Roles"];                               

        var tuple = db.UsersInRoles.SingleOrDefault(d => d.UserId == user.UserId);
        var roleNameID = db.Roles.SingleOrDefault(d => d.RoleName == choosenRole).RoleId;
        tuple.RoleId = roleNameID;

        db.SubmitChanges();

        return RedirectToAction("Index");
    }

但是,我收到了这个错误..

  

“UsersInRole”类型的对象的成员“RoleId”的值已更改。   无法更改定义对象标识的成员。   考虑添加具有新标识的新对象并删除现有标识。

我被困了。有什么想法吗?

2 个答案:

答案 0 :(得分:9)

您应该使用操作代码中提供的UserRolesMembership静态类,而不是直接从db(datacontext)访问成员资格表。

像这样:

System.Web.Security.Roles.AddUserToRole(usernameID, choosenRole);

假设您的usernameID是您要更改的用户的字符串键,并且choosenRole包含您要将用户添加到的角色名称键:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditRole(string usernameID, FormCollection formValues)
{
    string choosenRole = Request.Form["Roles"];                               
    System.Web.Security.Roles.AddUserToRole(usernameID, choosenRole);

    return RedirectToAction("Index");
}

答案 1 :(得分:0)

UsersInRole.RoleIdUsersInRole表的主键的一部分,因此无法更改。您应该遵循错误消息给出的建议并删除现有的UsersInRole实例并创建一个新实例。