2015-01-20 50 views
3

如何从ASP.NET身份2.x中的角色中删除用户?关于向用户添加角色的 没有问题,但是当我想从用户移除某个角色时,我无法使用。应该提及的是,没有任何异常或错误!从ASP.NET身份2.x中的角色中删除用户

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

如果您已经拥有了用户的ID,就没有必要再次获取用户(仅当您希望确保用户确实存在,那么你必须用if语句包装你的foreach)。删除方法需要角色的名称而不是ID,才能从角色中删除用户。您可以使用操作结果(在我的示例中存储在deletionResult中)确保操作成功。请记住,用户管理器的名称(在我的示例中为UserManager)可以根据您的实施情况而有所不同。

0

你可能想看看这个博客帖子:

//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?! 
      } 
     } 
    } 

插入作用的方法。 ASP.NET团队有一个示例,其中包括向用户添加和删除角色。

ASP.NET Identity 2.0: Customizing Users and Roles

0

我有同样的问题,我最终使用是 RemoveFromRolesAsync(字符串userid,则params字符串[]的角色)方法 从的UserManager。

在数组中使用角色名称。 但有一个问题,即如果用户不在数组中的某个角色中,用户将不会从数组中的任何角色中删除。 全部或全无。

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

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

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

希望它可以帮助

相关问题