从 ASP.NET 身份 2.x 中的角色中删除用户
Remove User from Roles in ASP.NET Identity 2.x
如何从 ASP.NET 身份 2.x 中的角色中删除用户?
关于向用户添加角色没有问题,但是当我想从用户中删除角色时,我 cannot.It 应该提到没有异常或错误!
//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 });
}
}
}
您可能想查看此博客 post。 ASP.NET 团队有一个示例,其中包括为用户添加和删除角色。
您要查找的是 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)可能会因您的实现而异。
我遇到了同样的问题,我最终使用的是
RemoveFromRolesAsync(string userId, params string[] roles) 方法
来自用户管理器。
使用数组中的角色名称是可行的。
但是有一个问题,如果用户不在数组中的角色之一,则用户不会从数组中的任何角色中删除。
全有或全无。
var usr = UserManager.FindById(usrV.ID.ToString());
string[] deleteList;
deleteList= new string[1];
deleteList[0] = "Engineer";
var rresult1 = UserManager.RemoveFromRolesAsync(usr.Id, deleteList);
希望对您有所帮助
如何从 ASP.NET 身份 2.x 中的角色中删除用户? 关于向用户添加角色没有问题,但是当我想从用户中删除角色时,我 cannot.It 应该提到没有异常或错误!
//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 });
}
}
}
您可能想查看此博客 post。 ASP.NET 团队有一个示例,其中包括为用户添加和删除角色。
您要查找的是 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)可能会因您的实现而异。
我遇到了同样的问题,我最终使用的是 RemoveFromRolesAsync(string userId, params string[] roles) 方法 来自用户管理器。
使用数组中的角色名称是可行的。 但是有一个问题,如果用户不在数组中的角色之一,则用户不会从数组中的任何角色中删除。 全有或全无。
var usr = UserManager.FindById(usrV.ID.ToString());
string[] deleteList;
deleteList= new string[1];
deleteList[0] = "Engineer";
var rresult1 = UserManager.RemoveFromRolesAsync(usr.Id, deleteList);
希望对您有所帮助