2009-05-06 29 views
6

In meiner App habe ich eine Administratorrolle, und diese Art von Benutzern kann die Rolle eines Benutzers (Client, Manager ...) ändern. Ich verwende den integrierten Mitgliedschaftsanbieter. Hier ist, was ich versuchte zu tun ...ASP.NET MVC: Wie kann ich die Rolle eines Benutzers ändern?

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

Aber ich habe diesen Fehler ..

Wert des Mitglieds RoleID 'ein Objekt des Typs ‚UsersInRole‘ geändert. Ein Element, das die Identität des Objekts definiert, kann nicht geändert werden. Sie können ein neues Objekt mit einer neuen Identität hinzufügen und stattdessen das vorhandene Objekt löschen.

Ich bin stecken geblieben. Irgendwelche Ideen?

+0

Verwenden Sie den integrierten Mitgliedschaftsanbieter oder verwalten Sie Benutzer/Rollen selbst? –

+0

danke ich habe es schon bearbeitet – wallyqs

Antwort

9

Anstatt zu versuchen, die Mitgliedschaft Tabellen direkt aus der db (Datacontext) zuzugreifen, sollten Sie die User, Roles und Membership statischen Klassen dort innerhalb des Aktionscode zur Verfügung gestellt werden.

So:

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

Unter der Annahme, dass Ihr usernameID der String Schlüssel des Benutzers ist, dass Sie ändern möchten, und choosenRole enthält den Rollennamen Schlüssel Sie den Benutzer hinzufügen möchten:

[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

Sorry, ich habe es nicht verstanden. Danke für den Kommentar. – wallyqs

+0

Danke! Ich wusste nichts davon. Das hat es geschafft! – wallyqs

0

UsersInRole.RoleId ist Teil des Primärschlüssels der UsersInRole Tabelle und kann daher nicht geändert werden. Sie sollten dem Vorschlag der Fehlermeldung folgen und die vorhandene Instanz UsersInRole löschen und eine neue erstellen.

+0

Also ist es nicht möglich und ich muss die Mitgliedschaft des Users neu aufbauen? – wallyqs

+0

Ja, das ist nicht möglich. Sie könnten also eine neue UsersInRole-Instanz löschen und erstellen oder dem Vorschlag von cottsak folgen (verwenden Sie die Membership-Klassen). –

Verwandte Themen