Fix location link for group permissions on POST

This commit is contained in:
René Pfeuffer
2018-09-25 12:51:10 +02:00
parent 5fb36a553d
commit 09072d06a6
2 changed files with 10 additions and 5 deletions

View File

@@ -70,14 +70,15 @@ public class PermissionRootResource {
@TypeHint(TypeHint.NO_CONTENT.class) @TypeHint(TypeHint.NO_CONTENT.class)
@Consumes(VndMediaType.PERMISSION) @Consumes(VndMediaType.PERMISSION)
@Path("") @Path("")
public Response create(@PathParam("namespace") String namespace, @PathParam("name") String name, PermissionDto permission) throws Exception { public Response create(@PathParam("namespace") String namespace, @PathParam("name") String name, PermissionDto permission) throws AlreadyExistsException, NotFoundException {
log.info("try to add new permission: {}", permission); log.info("try to add new permission: {}", permission);
Repository repository = load(namespace, name); Repository repository = load(namespace, name);
RepositoryPermissions.permissionWrite(repository).check(); RepositoryPermissions.permissionWrite(repository).check();
checkPermissionAlreadyExists(permission, repository); checkPermissionAlreadyExists(permission, repository);
repository.getPermissions().add(dtoToModelMapper.map(permission)); repository.getPermissions().add(dtoToModelMapper.map(permission));
manager.modify(repository); manager.modify(repository);
return Response.created(URI.create(resourceLinks.permission().self(namespace, name, permission.getName()))).build(); String urlPermissionName = modelToDtoMapper.getUrlPermissionName(permission);
return Response.created(URI.create(resourceLinks.permission().self(namespace, name, urlPermissionName))).build();
} }

View File

@@ -41,9 +41,7 @@ public abstract class PermissionToPermissionDtoMapper {
*/ */
@AfterMapping @AfterMapping
void appendLinks(@MappingTarget PermissionDto target, @Context Repository repository) { void appendLinks(@MappingTarget PermissionDto target, @Context Repository repository) {
String permissionName = Optional.of(target.getName()) String permissionName = getUrlPermissionName(target);
.filter(p -> !target.isGroupPermission())
.orElse(GROUP_PREFIX + target.getName());
Links.Builder linksBuilder = linkingTo() Links.Builder linksBuilder = linkingTo()
.self(resourceLinks.permission().self(repository.getNamespace(), repository.getName(), permissionName)); .self(resourceLinks.permission().self(repository.getNamespace(), repository.getName(), permissionName));
if (RepositoryPermissions.permissionWrite(repository).isPermitted()) { if (RepositoryPermissions.permissionWrite(repository).isPermitted()) {
@@ -52,4 +50,10 @@ public abstract class PermissionToPermissionDtoMapper {
} }
target.add(linksBuilder.build()); target.add(linksBuilder.build());
} }
public String getUrlPermissionName(PermissionDto permissionDto) {
return Optional.of(permissionDto.getName())
.filter(p -> !permissionDto.isGroupPermission())
.orElse(GROUP_PREFIX + permissionDto.getName());
}
} }