2009-05-06 2 views
6

내 앱에는 관리자 역할이 있으며 이러한 종류의 사용자는 사용자 (클라이언트, 관리자 ...)의 역할을 변경할 수 있습니다. 내장 멤버십 공급자를 사용하고 있습니다. 다음은이 오류를 가지고, 내가 ...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'의 대상의 '역할 ID'로 변경. 개체의 ID를 정의하는 구성원은 변경할 수 없습니다. 새 개체를 새 ID로 추가하고 기존 ID를 삭제하는 것이 좋습니다.

나는 갇혔다. 어떤 아이디어?

+0

을이 같이

기본 제공 멤버십 공급자를 사용하고 있습니까? 아니면 사용자/역할을 직접 관리하고 있습니까? –

+0

덕분에 나는 이미 그것을 편집했습니다 – wallyqs

답변

9

db (datacontext)에서 직접 멤버십 테이블에 액세스하는 대신 작업 코드에 제공된 정적 클래스 인 User, RolesMembership을 사용해야합니다.

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"); 
} 
+0

미안, 나는 그것을 얻지 않았다. 댓글 주셔서 감사합니다. – wallyqs

+0

감사! 나는 이것에 대해 몰랐다. 그랬어! – wallyqs

0

UsersInRole.RoleIdUsersInRole 테이블의 기본 키의 일부이므로 변경할 수 없습니다. 오류 메시지의 제안에 따라 기존 UsersInRole 인스턴스를 삭제하고 새 인스턴스를 만들어야합니다.

+0

그래서 가능하지 않고 사용자의 회원을 다시 만들어야합니까? – wallyqs

+0

예, 가능하지 않습니다. 따라서 새로운 UsersInRole 인스턴스를 삭제 및 생성하거나 cottsak의 제안을 따르십시오 (Membership 클래스 사용). –

관련 문제