//public async Task<List<UserHasRoleDto>> RelationalRoles(int userId) //{ // var roleEqualityComparer = new RoleEqualityComparer(); // var roles = (await _dbContext.Roles.Include(r => r.LinksToChildren).ToListAsync()); // roles. // var userRoles = (await _dbContext.UserRoles.Where(ur => ur.UserId == userId).ToListAsync()) // .Select(ur => roleIdToRole[ur.RoleId]) // .ToHashSet(,); // var processedRoles = new HashSet<Role>(); // var userHasRoles = roles.Select(r => new UserHasRoleDto { Id = r.Id, Name = r.Name}); // foreach (var role in userRoles) // { // userHasRoles.Add(new UserHasRoleDto // { // Id = role.Id, // Name = role.Name, // Children = role.LinksToChildren.Se // }); // } public async Task UpdateUserRoles(UpdateUserRolesDto dto) { var existingRoleIds = (await _dbContext.UserRoles.Where(ur => ur.UserId == dto.UserId).ToListAsync()) .Select(ur => ur.RoleId) .ToHashSet(); foreach (var roleId in dto.RoleIds) { if (existingRoleIds.Contains(roleId)) { existingRoleIds.Remove(roleId); } else { var newUserRoleLink = new IdentityUserRole <int> { UserId = dto.UserId, RoleId = roleId }; await _dbContext.UserRoles.AddAsync(newUserRoleLink); } } var rolesToUnbind = await _dbContext.UserRoles.Where(ur => existingRoleIds.Contains(ur.RoleId) && ur.UserId == dto.UserId) .ToListAsync(); rolesToUnbind.ForEach(r => _dbContext.UserRoles.Remove(r)); await _dbContext.SaveChangesAsync(); }
public async Task <IActionResult> UpdateRoles([FromBody] UpdateUserRolesDto updateUserRolesDto) { await _userService.UpdateUserRoles(updateUserRolesDto); return(Ok()); }