2009-05-06 28 views
6

Uygulamamda Yönetici rolüm var ve bu tür kullanıcılar bir kullanıcının rolünü değiştirebilir (istemci, yönetici ...). Yerleşik Üyelik sağlayıcısı kullanıyorum. İşte bu hata var, ben ...ASP .NET MVC: Bir kullanıcının rolünü nasıl değiştirebilirim?

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

yapmaya çalıştığı budur Ama .. üyesinin

Değer türü 'UsersInRole' bir nesnenin 'RolNo' değiştirdi. Nesnenin kimliğini tanımlayan bir üye değiştirilemez. Yeni kimliğe sahip yeni bir nesneyi eklemeyi ve bunun yerine mevcut olanı silmeyi düşünün.

Ben şaşırıp değilim. Herhangi bir fikir?

+0

Bunun gibi

Yerleşik Üyelik sağlayıcısı mı kullanıyorsunuz yoksa kullanıcıları/rolleri kendiniz mi yönetiyorsunuz? –

+0

Teşekkürler zaten düzenledim – wallyqs

cevap

9

Aksine orada eylem kodu içinde sağlanan User, Roles ve Membership statik sınıfları kullanarak olmalıdır db (datacontext) doğrudan üyelik tabloları erişmeye çalışırken daha.

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

sizin usernameID değiştirmek istediğiniz ve choosenRole size kullanıcıyı eklemek istediğiniz rol adı anahtarı içeren kullanıcının dize anahtar olduğunu varsayarsak:

[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

Üzgünüm, anlamadım. Yorum için teşekkürler. – wallyqs

+0

Teşekkürler! Bunu bilmiyordum. Bu yaptı! – wallyqs

0

UsersInRole.RoleIdUsersInRole birincil anahtarın bir parçası olup bu nedenle değiştirilemez. Hata iletisi tarafından verilen öneriyi takip etmeli ve mevcut UsersInRole örneğini silmeli ve yeni bir tane oluşturmalısınız.

+0

Yani bu mümkün değil ve Kullanıcı üyeliğini yeniden inşa etmek zorunda mıyım? – wallyqs

+0

Evet, bu mümkün değil. Böylece yeni bir UsersInRole örneğini silebilir ve oluşturabilir veya cottsak öneriyi (Üyelik sınıflarını kullanarak) uygulayabilirsiniz. –

İlgili konular