2015-01-20 2 views
3

Как удалить пользователя из ролей в ASP.NET Identity 2.x? о добавлении роли пользователю нет проблем, но когда я хочу удалить роль от пользователя, я cannot.It следует упомянуть, что нет никаких исключений или ошибок!Удалить пользователя из ролей в ASP.NET Identity 2.x

//POST: Admin/User/Edit/5 
    [AcceptVerbs(HttpVerbs.Post)] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Edit([Bind(Prefix = "")]UserViewModel userViewModel, List<int> availableRoles) 
    { 
     if (ModelState.IsValid) 
     { 
      List<int> newListOfRolesIDs = availableRoles; 
      List<int> oldListOfRolesIDs = UserBLL.Instance.GetRolesIDs(userViewModel.Id); 
      List<int> deletedList; 
      List<int> addedList; 
      var haschanged = oldListOfRolesIDs.ChangeTracking(newListOfRolesIDs, out deletedList, out addedList); 
      using (new EFUnitOfWorkFactory().Create()) 
      { 
       if (haschanged) 
       { 
        UserBLL.Instance.InsertRoles(addedList, userViewModel.Id); 
        UserBLL.Instance.DeleteRoles(deletedList, userViewModel.Id); 
       } 
       await UserBLL.Instance.UpdateAsync(userViewModel); 
      } 
      //ArticleBLL.Instance.UpdatePartial(articleViewModel, m => m.Title); 
      return RedirectToAction("Edit"); 
     } 
     return View(userViewModel); 
    } 

Удалить метод Роль:

public void DeleteRoles(List<int> deleteList, int? userId) 
    { 
     if (userId != null) 
     { 
      User user = UserManager.FindByIdAsync(userId.Value).Result; 
      foreach (var i in deleteList) 
      { 
       user.Roles.Remove(new UserRole { RoleId = i, UserId = user.Id }); // What's the problem?! 
      } 
     } 
    } 

Вставка метод Роль:

public void InsertRoles(List<int> insertList, int? userId) 
    { 
     if (userId != null) 
     { 
      User user = UserManager.FindByIdAsync(userId.Value).Result; 
      foreach (var i in insertList) 
      { 
       user.Roles.Add(new UserRole { RoleId = i, UserId = user.Id }); 
      } 
     } 
    } 

ответ

9

Что вы ищете является RemoveFromRoleAsync метод. Пример будет выглядеть примерно следующим образом:

public async Task DeleteRolesAsync(List<string> deleteList, int? userId) 
{ 
    if (userId != null) 
    { 
     foreach (var roleName in deleteList) 
     { 
      IdentityResult deletionResult = await UserManager.RemoveFromRoleAsync(userId, roleName); 
     } 
    } 
} 

Если у вас уже есть идентификатор пользователя, нет никакой необходимости, чтобы получить пользователь снова (только если вы хотите, чтобы убедиться, что пользователь действительно существует, то должны обернуть ваш foreach с помощью if-statement). Методам удаления требуется имя роли, а не идентификатор, чтобы удалить пользователя из роли. Вы можете использовать результат операции (в моем примере, хранящейся в deleteationResult), чтобы убедиться, что операция прошла успешно. Помните, что имя менеджера пользователя (в моем примере UserManager) может варьироваться в зависимости от вашей реализации.

0

Вы могли бы хотеть проверить этот блог. Команда ASP.NET имеет образец, который включает в себя добавление и удаление ролей от пользователя.

ASP.NET Identity 2.0: Customizing Users and Roles

0

У меня была такая же проблема, и в результате я использовал RemoveFromRolesAsync (string userId, params string []). Метод из UserManager.

Использование имен ролей в массиве работает. Но есть проблема, если пользователь не находится в одной из ролей в массиве, пользователь не будет удален из любых ролей в массиве. Все или ничего.

  var usr = UserManager.FindById(usrV.ID.ToString()); 

      string[] deleteList; 
      deleteList= new string[1]; 
      deleteList[0] = "Engineer"; 

      var rresult1 = UserManager.RemoveFromRolesAsync(usr.Id, deleteList); 

Надеется, что это помогает

Смежные вопросы