diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupPermissionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupPermissionResource.java index 888e527eee..11934abcb0 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupPermissionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupPermissionResource.java @@ -48,7 +48,7 @@ public class GroupPermissionResource { }) public Response getPermissions(@PathParam("id") String id) { Collection permissions = permissionAssigner.readPermissionsForGroup(id); - return Response.ok(permissionCollectionToDtoMapper.map(permissions, id)).build(); + return Response.ok(permissionCollectionToDtoMapper.mapForGroup(permissions, id)).build(); } /** diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionCollectionToDtoMapper.java index 093b2930e9..87d1aeca9f 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionCollectionToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionCollectionToDtoMapper.java @@ -20,17 +20,25 @@ public class PermissionCollectionToDtoMapper { this.resourceLinks = resourceLinks; } - public PermissionListDto map(Collection permissions, @Context String userId) { + public PermissionListDto mapForUser(Collection permissions, String userId) { + return map(permissions, userId, resourceLinks.userPermissions()); + } + + public PermissionListDto mapForGroup(Collection permissions, String groupId) { + return map(permissions, groupId, resourceLinks.groupPermissions()); + } + + private PermissionListDto map(Collection permissions, String id, ResourceLinks.WithPermissionLinks links) { String[] permissionStrings = permissions .stream() .map(PermissionDescriptor::getValue) .toArray(String[]::new); PermissionListDto target = new PermissionListDto(permissionStrings); - Links.Builder linksBuilder = linkingTo().self(resourceLinks.userPermissions().permissions(userId)); + Links.Builder linksBuilder = linkingTo().self(links.permissions(id)); if (PermissionPermissions.assign().isPermitted()) { - linksBuilder.single(link("overwrite", resourceLinks.userPermissions().overwritePermissions(userId))); + linksBuilder.single(link("overwrite", links.overwritePermissions(id))); } target.add(linksBuilder.build()); diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ResourceLinks.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ResourceLinks.java index c62a34f093..be036007be 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ResourceLinks.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ResourceLinks.java @@ -96,11 +96,17 @@ class ResourceLinks { } } + interface WithPermissionLinks { + String permissions(String name); + + String overwritePermissions(String name); + } + UserPermissionLinks userPermissions() { return new UserPermissionLinks(scmPathInfoStore.get()); } - static class UserPermissionLinks { + static class UserPermissionLinks implements WithPermissionLinks { private final LinkBuilder userPermissionLinkBuilder; UserPermissionLinks(ScmPathInfo pathInfo) { @@ -120,7 +126,7 @@ class ResourceLinks { return new GroupPermissionLinks(scmPathInfoStore.get()); } - static class GroupPermissionLinks { + static class GroupPermissionLinks implements WithPermissionLinks { private final LinkBuilder groupPermissionLinkBuilder; GroupPermissionLinks(ScmPathInfo pathInfo) { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserPermissionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserPermissionResource.java index 35988b7fb2..2b02104646 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserPermissionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserPermissionResource.java @@ -48,7 +48,7 @@ public class UserPermissionResource { }) public Response getPermissions(@PathParam("id") String id) { Collection permissions = permissionAssigner.readPermissionsForUser(id); - return Response.ok(permissionCollectionToDtoMapper.map(permissions, id)).build(); + return Response.ok(permissionCollectionToDtoMapper.mapForUser(permissions, id)).build(); } /**