Adding restricted view for user managable repositories Adds additional rest method to list the repositories where the user has manage permissions. Restricts the view for uploads to only managable repositories.
Project: http://git-wip-us.apache.org/repos/asf/archiva/repo Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/de3eb832 Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/de3eb832 Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/de3eb832 Branch: refs/heads/master Commit: de3eb83242b42d75546670e8859cdb1f59fe4fa6 Parents: d01764b Author: Martin Stockhammer <[email protected]> Authored: Wed Sep 14 21:49:30 2016 +0200 Committer: Martin Stockhammer <[email protected]> Committed: Wed Sep 14 21:49:30 2016 +0200 ---------------------------------------------------------------------- .../archiva/rest/api/services/BrowseService.java | 10 ++++++++++ .../archiva/rest/services/DefaultBrowseService.java | 13 +++++++++++++ .../archiva/security/DefaultUserRepositories.java | 5 +++++ .../org/apache/archiva/security/UserRepositories.java | 14 ++++++++++++++ .../apache/archiva/security/UserRepositoriesStub.java | 5 +++++ .../main/webapp/js/archiva/artifacts-management.js | 2 +- 6 files changed, 48 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/archiva/blob/de3eb832/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/BrowseService.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/BrowseService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/BrowseService.java index 777d15d..cdb99eb 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/BrowseService.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-api/src/main/java/org/apache/archiva/rest/api/services/BrowseService.java @@ -102,6 +102,16 @@ public interface BrowseService throws ArchivaRestServiceException; /** + * @return List of repositories current user can manage + */ + @Path("userManagableRepositories") + @GET + @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) + @RedbackAuthorization(noPermission = true, noRestriction = true) + List<ManagedRepository> getUserManagableRepositories() + throws ArchivaRestServiceException; + + /** * return the dependency Tree for an artifacts * <b>the List result has only one entry</b> */ http://git-wip-us.apache.org/repos/asf/archiva/blob/de3eb832/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java index 5e5a465..682c367 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java @@ -508,6 +508,19 @@ public class DefaultBrowseService } @Override + public List<ManagedRepository> getUserManagableRepositories() throws ArchivaRestServiceException { + try + { + return userRepositories.getManagableRepositories( getPrincipal() ); + } + catch ( ArchivaSecurityException e ) + { + throw new ArchivaRestServiceException( "repositories.read.managable.error", + Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e ); + } + } + + @Override public List<Artifact> getDependees( String groupId, String artifactId, String version, String repositoryId ) throws ArchivaRestServiceException { http://git-wip-us.apache.org/repos/asf/archiva/blob/de3eb832/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/archiva/security/DefaultUserRepositories.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/archiva/security/DefaultUserRepositories.java b/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/archiva/security/DefaultUserRepositories.java index 91ff5ea..4679bc7 100644 --- a/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/archiva/security/DefaultUserRepositories.java +++ b/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/archiva/security/DefaultUserRepositories.java @@ -99,6 +99,11 @@ public class DefaultUserRepositories return getAccessibleRepositories( principal, ArchivaRoleConstants.OPERATION_REPOSITORY_ACCESS ); } + @Override + public List<ManagedRepository> getManagableRepositories(String principal) throws ArchivaSecurityException, AccessDeniedException, PrincipalNotFoundException { + return getAccessibleRepositories( principal, ArchivaRoleConstants.OPERATION_REPOSITORY_UPLOAD ); + } + private List<ManagedRepository> getAccessibleRepositories( String principal, String operation ) throws ArchivaSecurityException, AccessDeniedException, PrincipalNotFoundException { http://git-wip-us.apache.org/repos/asf/archiva/blob/de3eb832/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/archiva/security/UserRepositories.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/archiva/security/UserRepositories.java b/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/archiva/security/UserRepositories.java index 6e38812..493eece 100644 --- a/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/archiva/security/UserRepositories.java +++ b/archiva-modules/archiva-web/archiva-security/src/main/java/org/apache/archiva/security/UserRepositories.java @@ -98,5 +98,19 @@ public interface UserRepositories */ List<ManagedRepository> getAccessibleRepositories( String principal ) throws ArchivaSecurityException, AccessDeniedException, PrincipalNotFoundException; + + /** + * + * Returns a list of repositories for which the user has the manager role. + * + * @param principal + * @since 2.2.2 + * @return + * @throws ArchivaSecurityException + * @throws AccessDeniedException + * @throws PrincipalNotFoundException + */ + List<ManagedRepository> getManagableRepositories( String principal ) + throws ArchivaSecurityException, AccessDeniedException, PrincipalNotFoundException; } http://git-wip-us.apache.org/repos/asf/archiva/blob/de3eb832/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/security/UserRepositoriesStub.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/security/UserRepositoriesStub.java b/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/security/UserRepositoriesStub.java index 485d4a7..3cd2dad 100644 --- a/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/security/UserRepositoriesStub.java +++ b/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/security/UserRepositoriesStub.java @@ -88,4 +88,9 @@ public class UserRepositoriesStub { return Collections.emptyList(); } + + @Override + public List<ManagedRepository> getManagableRepositories(String principal) throws ArchivaSecurityException, AccessDeniedException, PrincipalNotFoundException { + return Collections.emptyList(); + } } http://git-wip-us.apache.org/repos/asf/archiva/blob/de3eb832/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/artifacts-management.js ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/artifacts-management.js b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/artifacts-management.js index e87ec56..aa96a83 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/artifacts-management.js +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/artifacts-management.js @@ -86,7 +86,7 @@ define("archiva.artifacts-management",["jquery","i18n","utils","jquery.tmpl","kn dataType: 'json', success: function(data) { mainContent.html($("#file-upload-screen").html()); - $.ajax("restServices/archivaServices/browseService/userRepositories", { + $.ajax("restServices/archivaServices/browseService/userManagableRepositories", { type: "GET", dataType: 'json', success: function(data) {
