Example #1
0
        //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();
        }
Example #2
0
        public async Task <IActionResult> UpdateRoles([FromBody] UpdateUserRolesDto updateUserRolesDto)
        {
            await _userService.UpdateUserRoles(updateUserRolesDto);

            return(Ok());
        }