diff --git a/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaRoleConstants.java b/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaRoleConstants.java
index 17e085878..1ab7f4be5 100644
--- a/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaRoleConstants.java
+++ b/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaRoleConstants.java
@@ -29,6 +29,8 @@ public class ArchivaRoleConstants
public static final String GUEST_ROLE = "Guest";
+ public static final String BASE_REPOSITORY_MANAGER = "Repository Manager Base";
+
// dynamic role prefixes
public static final String REPOSITORY_MANAGER_ROLE_PREFIX = "Repository Manager";
diff --git a/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaRoleProfileManager.java b/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaRoleProfileManager.java
index 1eb72ffb9..2d3aec8af 100644
--- a/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaRoleProfileManager.java
+++ b/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaRoleProfileManager.java
@@ -32,6 +32,8 @@ public class ArchivaRoleProfileManager
public void initialize()
throws RoleProfileException
{
+ getRole( "archiva-repository-manager-base" );
+
mergeRoleProfiles( "system-administrator", "archiva-system-administrator" );
mergeRoleProfiles( "user-administrator", "archiva-user-administrator" );
mergeRoleProfiles( "guest", "archiva-guest" );
diff --git a/archiva-security/src/main/java/org/apache/maven/archiva/security/BaseRepositoryManagerRoleProfile.java b/archiva-security/src/main/java/org/apache/maven/archiva/security/BaseRepositoryManagerRoleProfile.java
new file mode 100644
index 000000000..a165e9bbc
--- /dev/null
+++ b/archiva-security/src/main/java/org/apache/maven/archiva/security/BaseRepositoryManagerRoleProfile.java
@@ -0,0 +1,42 @@
+package org.apache.maven.archiva.security;
+
+import org.codehaus.plexus.rbac.profile.AbstractRoleProfile;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @plexus.component role="org.codehaus.plexus.rbac.profile.RoleProfile"
+ * role-hint="archiva-repository-manager-base"
+ */
+public class BaseRepositoryManagerRoleProfile
+ extends AbstractRoleProfile
+{
+ /**
+ * Create the Role name for a Repository Manager, using the provided repository id.
+ *
+ */
+ public String getRoleName( )
+ {
+ return ArchivaRoleConstants.BASE_REPOSITORY_MANAGER;
+ }
+
+ public List getOperations()
+ {
+ List operations = new ArrayList();
+
+ operations.add( ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION );
+
+ return operations;
+ }
+
+ public boolean isPermanent()
+ {
+ return true;
+ }
+
+ public boolean isAssignable()
+ {
+ return false;
+ }
+}
diff --git a/archiva-security/src/main/java/org/apache/maven/archiva/security/RepositoryManagerDynamicRoleProfile.java b/archiva-security/src/main/java/org/apache/maven/archiva/security/RepositoryManagerDynamicRoleProfile.java
index c94fbac30..c7c4b4b4f 100644
--- a/archiva-security/src/main/java/org/apache/maven/archiva/security/RepositoryManagerDynamicRoleProfile.java
+++ b/archiva-security/src/main/java/org/apache/maven/archiva/security/RepositoryManagerDynamicRoleProfile.java
@@ -52,6 +52,12 @@ public List getOperations()
return operations;
}
+
+ public List getChildRoles()
+ {
+ return Collections.singletonList( ArchivaRoleConstants.BASE_REPOSITORY_MANAGER );
+ }
+
public List getDynamicChildRoles( String string )
{
return Collections.singletonList(
diff --git a/archiva-security/src/main/resources/META-INF/plexus/components.xml b/archiva-security/src/main/resources/META-INF/plexus/components.xml
index 3f5190db0..5c34b87fe 100644
--- a/archiva-security/src/main/resources/META-INF/plexus/components.xml
+++ b/archiva-security/src/main/resources/META-INF/plexus/components.xml
@@ -80,6 +80,20 @@
+
+ org.codehaus.plexus.rbac.profile.RoleProfile
+ archiva-repository-manager-base
+ org.apache.maven.archiva.security.BaseRepositoryManagerRoleProfile
+
+
+ org.codehaus.plexus.security.rbac.RBACManager
+
+
+ org.codehaus.plexus.PlexusContainer
+ container
+
+
+
org.codehaus.plexus.rbac.profile.DynamicRoleProfile
archiva-repository-manager