public async Task <ActionResult> PostAssignRolesToUser([FromBody] RoleUserAssignmentRequest roleAssignmentRequest) { var dbTransaction = await _dataContext.Database.BeginTransactionAsync(); var result = await _roleManagementRepository.AssignRolesToUser(roleAssignmentRequest); if (result.StatusCode == Utils.Success) { await dbTransaction.CommitAsync(); return(StatusCode(StatusCodes.Status200OK, result)); } else { await dbTransaction.RollbackAsync(); return(StatusCode(StatusCodes.Status400BadRequest, result)); } }
public async Task <ToRespond> AssignRolesToUser(RoleUserAssignmentRequest roleAssignmentRequest) { if (roleAssignmentRequest.Users == null || roleAssignmentRequest.Roles == null || roleAssignmentRequest == null) { return(new ToRespond() { StatusCode = Helpers.ObjectNull, StatusMessage = Helpers.StatusMessageObjectNull }); } //CHECK THE LIST OF ROLES TO ASSIGN FOR AUTHENTICITY //var listOfRolesToAssign = new List<string>(); var listOfRolesToReturn = new List <Role>(); foreach (var h in roleAssignmentRequest.Roles) { var roleDetail = await _roleManager.FindByIdAsync(Convert.ToString(h.Id)); if (roleDetail == null) { return(new ToRespond() { StatusCode = Helpers.NotFound, StatusMessage = Helpers.StatusMessageNotFound }); } //listOfRolesToAssign.Add(roleDetail.Name); listOfRolesToReturn.Add(roleDetail); } var userRolesToReturn = new List <UserAndRoleResponse>(); foreach (var z in roleAssignmentRequest.Users) { var userDetail = await _userManager.FindByIdAsync(Convert.ToString(z.Id)); if (userDetail == null) { return(new ToRespond() { StatusCode = Helpers.NotFound, StatusMessage = Helpers.StatusMessageNotFound }); } //DELETE THE USER'S OLD ROLES var usersRoles = await _userManager.GetRolesAsync(userDetail); var iResult = await _userManager.RemoveFromRolesAsync(userDetail, usersRoles.AsEnumerable()); if (!iResult.Succeeded) { return(new ToRespond() { StatusCode = Helpers.NotSucceeded, StatusMessage = "Not Succeded" }); } var listOfRolesToAssign = listOfRolesToReturn.Select(a => a.Name); //UPDATE THE USER'S ROLES WITH THIS CURRENT INCOMING ROLES //foreach (var roleDett in listOfRolesToAssign) //{ // //CHECK TO SEE IF ANYBODY HOLDS THAT ROLE (APART FROM AllStaff ROLE)...IF ANY OVERWRITE IT //} try { var result = await _userManager.AddToRolesAsync(userDetail, listOfRolesToAssign); if (!result.Succeeded) { return(new ToRespond() { StatusCode = Helpers.NotSucceeded, StatusMessage = "Not succeeded" }); } } catch (Exception) { return(new ToRespond() { StatusCode = Helpers.RoleAssignmentError, StatusMessage = Helpers.StatusMessageRoleAssignmentError }); } userRolesToReturn.Add(new UserAndRoleResponse() { User = _mapper.Map <UserToReturn>(userDetail), Roles = _mapper.Map <List <RoleResponse> >(listOfRolesToReturn) }); } return(new ToRespond() { StatusCode = Helpers.Success, ObjectValue = userRolesToReturn, StatusMessage = Helpers.StatusMessageSuccess }); }