dirigible icon indicating copy to clipboard operation
dirigible copied to clipboard

Can't remove users's roles from user dialog

Open kainio opened this issue 1 year ago • 1 comments

Describe the bug In the user dialog, when trying to delete a role or more from a user, the change didn't apply.

To Reproduce Steps to reproduce the behavior:

  1. Go to Users view in the Security perspective
  2. Click on Edit user
  3. A User dialog will popup, try editing the roles of the user by removing (a) role(s)
  4. Click on save

Expected behavior The unselected roles should be removed from the user's roles

Desktop:

  • OS: Windows
  • Browser chrome
  • Version 126

Additional context Using dirigible 10.6.13

kainio avatar Jul 12 '24 09:07 kainio

I think the way it is implemented doesn't take into account to remove unselected roles:

   /**
     * Updates the user.
     *
     * @param id the id of the user
     * @param userParameter the user parameter
     * @return the response entity
     * @throws URISyntaxException the URI syntax exception
     */
    @PutMapping("{id}")
    public ResponseEntity<URI> updateUser(@PathVariable("id") String id, @Valid @RequestBody UserParameter userParameter)
            throws URISyntaxException {
        User user = userService.updateUser(id, userParameter.getUsername(), userParameter.getPassword(), userParameter.getTenant());
        userService.assignUserRolesByIds(user, userParameter.getRoles());
        return ResponseEntity.created(new URI(BaseEndpoint.PREFIX_ENDPOINT_SECURITY + "users/" + user.getId()))
                             .build();
    }
   public void assignUserRolesByIds(User user, Long[] roleIds) {
        for (Long roleId : roleIds) {
            Role role = roleService.findById(roleId);
            UserRoleAssignment assignment = new UserRoleAssignment();
            assignment.setUser(user);
            assignment.setRole(role);
            if (!assignmentRepository.findByUserAndRole(user, role)
                                     .isPresent()) {
                assignmentRepository.save(assignment);
            }
        }
    }

kainio avatar Jul 12 '24 12:07 kainio