ASP .NET MVC: как я могу изменить роль пользователя? - PullRequest
6 голосов
/ 06 мая 2009

В моем приложении у меня есть роль администратора, и пользователи такого типа могут изменять роль пользователя (клиент, менеджер ...). Я использую встроенный членства провайдера. Вот что я пытался сделать ...

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

Но я получил эту ошибку ..

Изменено значение элемента 'RoleId' объекта типа 'UsersInRole'. Член, определяющий идентичность объекта, не может быть изменен. Попробуйте добавить новый объект с новым идентификатором и удалить вместо него существующий.

Я застрял. Есть идеи?

Ответы [ 2 ]

9 голосов
/ 06 мая 2009

Вместо того, чтобы пытаться получить доступ к таблицам членства непосредственно из db (datacontext), вы должны использовать статические классы User, Roles и Membership, предоставленные в вашем коде действия.

Как это:

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 голосов
/ 06 мая 2009

UsersInRole.RoleId является частью первичного ключа таблицы UsersInRole и поэтому не может быть изменена. Вы должны следовать предложению, приведенному в сообщении об ошибке, удалить существующий экземпляр UsersInRole и создать новый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...