@RequestMapping(value = "/{userId:.+}", method = RequestMethod.PUT)
public void putUserPermission(@PathVariable String userId,
@RequestBody @NonNull List<String> externalRoles) {
List<Role> convertedRoles = externalRoles
.stream()
.map(extRole -> new Role().setSource(Role.Source.EXTERNAL).setName(extRole))
.collect(Collectors.toList());
ExternalUser extUser = new ExternalUser().setId(ControllerSupport.convert(userId))
.setExternalRoles(convertedRoles);
try {
UserPermission userPermission = permissionsResolver.resolveAndMerge(extUser);
log.debug(
"Updated user permissions (userId: {}, roles: {}, suppliedExternalRoles: {})",
userId,
userPermission.getRoles().stream().map(Role::getName).collect(Collectors.toList()),
externalRoles
);
permissionsRepository.put(userPermission);
} catch (PermissionResolutionException pre) {
throw new UserPermissionModificationException(pre);
}
}