public async Task<ActionResult> EditUsers(RoleAdminEditUsersViewModel viewmodel, string[] checkboxSelectedUsers) { var roleId = viewmodel.RoleId; var roleName = viewmodel.RoleName; var selectedUserIds = new string[]{""}; selectedUserIds = checkboxSelectedUsers; var assignedUserIds = UserManager.Users.Where(u => u.Roles.Any(r => r.RoleId == roleId)).Select(u => u.Id).ToList(); var allUserIds = UserManager.Users.Select(u => u.Id).ToList(); var currentPrincipalId = User.Identity.GetUserId(); foreach(var userId in allUserIds ) { IdentityResult result; // Add Role Assignment to User if (selectedUserIds.Contains(userId) && !assignedUserIds.Contains(userId)) { if (userId != currentPrincipalId) { result = await UserManager.AddToRoleAsync(userId, roleName); if (!result.Succeeded) { return RedirectToAction("Index"); } } } // Remove Role Assignment from User if (!selectedUserIds.Contains(userId) && assignedUserIds.Contains(userId)) { if (userId != currentPrincipalId) { result = await UserManager.RemoveFromRoleAsync(userId, roleName); if (!result.Succeeded) { return RedirectToAction("Index"); } } } } return View("Index"); }
// GET: Edit Users public async Task<ActionResult> EditUsers(string id) { AppRole role = await RoleManager.FindByIdAsync(id); var currentUserName = User.Identity.GetUserName(); if (role == null) { return RedirectToAction("Index"); } var viewmodel = new RoleAdminEditUsersViewModel() { RoleId = role.Id, RoleName = role.Name, AllUserNames = UserManager.Users.Select(u => u.UserName).ToList(), AssignedUserNames = UserManager.Users.Where(u => u.Roles.Any(r => r.RoleId == role.Id)).Select(u => u.UserName).ToList(), AllUsers = UserManager.Users.ToList(), AssignedUsers = UserManager.Users.Where(u => u.Roles.Any(r => r.RoleId == role.Id)).ToList() }; return View(viewmodel); }