Author: olamy
Date: Mon Aug 29 21:42:14 2011
New Revision: 1163025

URL: http://svn.apache.org/viewvc?rev=1163025&view=rev
Log:
[MRM-1504] repository admin module : implements update ManagedRepository

Added:
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/resources/META-INF/
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/resources/META-INF/redback/
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/resources/META-INF/redback/redback-core.xml
Modified:
    archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/pom.xml
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdmin.java
    
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdminTest.java

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/pom.xml
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/pom.xml?rev=1163025&r1=1163024&r2=1163025&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/pom.xml 
(original)
+++ archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/pom.xml 
Mon Aug 29 21:42:14 2011
@@ -32,11 +32,19 @@
       <groupId>org.apache.archiva</groupId>
       <artifactId>archiva-configuration</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.apache.archiva</groupId>
+      <artifactId>archiva-security</artifactId>
+    </dependency>
      <dependency>
       <groupId>org.apache.archiva</groupId>
       <artifactId>archiva-scheduler-repository</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.apache.archiva</groupId>
+      <artifactId>audit</artifactId>
+    </dependency>
+    <dependency>
       <groupId>javax.inject</groupId>
       <artifactId>javax.inject</artifactId>
       <version>1</version>
@@ -80,6 +88,26 @@
       <artifactId>spring-quartz</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.codehaus.redback</groupId>
+      <artifactId>redback-rbac-role-manager</artifactId>
+      <exclusions>
+        <exclusion>
+          <groupId>commons-logging</groupId>
+          <artifactId>commons-logging</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.redback</groupId>
+      <artifactId>redback-authentication-api</artifactId>
+        <exclusions>
+          <exclusion>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+          </exclusion>
+        </exclusions>
+    </dependency>
+    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <scope>test</scope>
@@ -91,6 +119,33 @@
     </dependency>
 
     <dependency>
+      <groupId>org.codehaus.redback</groupId>
+      <artifactId>redback-users-memory</artifactId>
+      <scope>test</scope>
+      <version>${redback.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.codehaus.redback</groupId>
+      <artifactId>redback-keys-memory</artifactId>
+      <scope>test</scope>
+      <version>${redback.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.codehaus.redback</groupId>
+      <artifactId>redback-rbac-cached</artifactId>
+      <version>${redback.version}</version>
+      <scope>test</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>commons-logging</groupId>
+          <artifactId>commons-logging</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+
+    <dependency>
       <groupId>org.apache.derby</groupId>
       <artifactId>derby</artifactId>
       <scope>test</scope>
@@ -118,6 +173,7 @@
         <configuration>
           <systemPropertyVariables>
             <appserver.base>${project.build.outputDirectory}</appserver.base>
+            <plexus.home>${project.build.outputDirectory}</plexus.home>
           </systemPropertyVariables>
         </configuration>
 

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java?rev=1163025&r1=1163024&r2=1163025&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java
 Mon Aug 29 21:42:14 2011
@@ -19,6 +19,8 @@ package org.apache.archiva.admin.reposit
  */
 
 import org.apache.archiva.admin.repository.RepositoryAdminException;
+import org.apache.archiva.audit.AuditEvent;
+import org.apache.archiva.audit.AuditListener;
 import org.apache.archiva.metadata.repository.MetadataRepository;
 import org.apache.archiva.metadata.repository.MetadataRepositoryException;
 import org.apache.archiva.metadata.repository.RepositorySession;
@@ -34,6 +36,10 @@ import org.apache.maven.archiva.configur
 import 
org.apache.maven.archiva.configuration.IndeterminateConfigurationException;
 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
 import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
+import org.apache.maven.archiva.security.ArchivaRoleConstants;
+import org.codehaus.plexus.redback.role.RoleManager;
+import org.codehaus.plexus.redback.role.RoleManagerException;
+import org.codehaus.plexus.redback.users.User;
 import org.codehaus.plexus.registry.Registry;
 import org.codehaus.plexus.registry.RegistryException;
 import org.codehaus.plexus.taskqueue.TaskQueueException;
@@ -82,10 +88,15 @@ public class DefaultManagedRepositoryAdm
     @Inject
     private RepositorySessionFactory repositorySessionFactory;
 
-
     @Inject
     private RepositoryStatisticsManager repositoryStatisticsManager;
 
+    @Inject
+    private List<AuditListener> auditListeners = new 
ArrayList<AuditListener>();
+
+    @Inject
+    protected RoleManager roleManager;
+
     public List<ManagedRepository> getManagedRepositories()
         throws RepositoryAdminException
     {
@@ -122,7 +133,7 @@ public class DefaultManagedRepositoryAdm
         return null;
     }
 
-    public Boolean addManagedRepository( ManagedRepository managedRepository, 
boolean needStageRepo )
+    public Boolean addManagedRepository( ManagedRepository managedRepository, 
boolean needStageRepo, User user )
         throws RepositoryAdminException
     {
         return
@@ -241,7 +252,7 @@ public class DefaultManagedRepositoryAdm
     }
 
 
-    public Boolean deleteManagedRepository( String repositoryId )
+    public Boolean deleteManagedRepository( String repositoryId, User user )
         throws RepositoryAdminException
     {
         Configuration config = archivaConfiguration.getConfiguration();
@@ -314,16 +325,118 @@ public class DefaultManagedRepositoryAdm
     }
 
 
-    public Boolean updateManagedRepository( ManagedRepository 
managedRepository, boolean needStageRepo )
+    public Boolean updateManagedRepository( ManagedRepository 
managedRepository, boolean needStageRepo, User user )
         throws RepositoryAdminException
     {
-        return null;  //To change body of implemented methods use File | 
Settings | File Templates.
+        // Ensure that the fields are valid.
+        Configuration configuration = archivaConfiguration.getConfiguration();
+
+        ManagedRepositoryConfiguration toremove = 
configuration.findManagedRepositoryById( managedRepository.getId() );
+
+        if ( toremove != null )
+        {
+            configuration.removeManagedRepository( toremove );
+        }
+        // FIXME the case of the attached staging repository
+        /*
+        if ( stagingRepository != null )
+        {
+            removeRepository( stagingRepository.getId(), configuration );
+        }*/
+
+        // Save the repository configuration.
+        String result;
+        RepositorySession repositorySession = 
repositorySessionFactory.createSession();
+        ManagedRepositoryConfiguration managedRepositoryConfiguration =
+            addManagedRepository( managedRepository.getId(), 
managedRepository.getLayout(), managedRepository.getName(),
+                                  managedRepository.getLocation(), 
managedRepository.isBlockRedeployments(),
+                                  managedRepository.isReleases(), 
managedRepository.isSnapshots(), needStageRepo,
+                                  managedRepository.getCronExpression() );
+
+        // FIXME only location has changed from previous
+        boolean resetStats = true;
+
+        try
+        {
+            triggerAuditEvent( managedRepository.getId(), null, 
AuditEvent.MODIFY_MANAGED_REPO, user );
+            addRepositoryRoles( managedRepositoryConfiguration );
+
+            // FIXME this staging part !!
+
+            //update changes of the staging repo
+            /*if ( stageNeeded )
+            {
+
+                stagingRepository = getStageRepoConfig( configuration );
+                addRepository( stagingRepository, configuration );
+                addRepositoryRoles( stagingRepository );
+
+            }*/
+            //delete staging repo when we dont need it
+            /*
+            if ( !stageNeeded )
+            {
+                stagingRepository = getStageRepoConfig( configuration );
+                removeRepository( stagingRepository.getId(), configuration );
+                removeContents( stagingRepository );
+                removeRepositoryRoles( stagingRepository );
+            }*/
+
+            saveConfiguration( this.archivaConfiguration.getConfiguration() );
+            if ( resetStats )
+            {
+                repositoryStatisticsManager.deleteStatistics( 
repositorySession.getRepository(),
+                                                              
managedRepository.getId() );
+                repositorySession.save();
+            }
+
+            //MRM-1342 Repository statistics report doesn't appear to be 
working correctly
+            //scan repository when modification of repository is successful
+            // olamy :  IMHO we are fine to ignore issue with scheduling 
scanning
+            // as here the repo has been updated
+            scanRepository( managedRepository.getId(), true );
+            // FIXME staging !!
+            /*
+            if ( stageNeeded )
+            {
+                executeRepositoryScanner( stagingRepository.getId() );
+            }*/
+
+        }
+        catch ( RoleManagerException e )
+        {
+            throw new RepositoryAdminException( e.getMessage(), e );
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            throw new RepositoryAdminException( e.getMessage(), e );
+        }
+        finally
+        {
+            repositorySession.close();
+        }
+
+        return true;
     }
 
     //--------------------------
     // utils methods
     //--------------------------
 
+    protected void triggerAuditEvent( String repositoryId, String resource, 
String action, User user )
+    {
+        log.warn( "no user found in triggerAuditEvent" );
+        AuditEvent event = new AuditEvent( repositoryId, user == null ? "null" 
: user.getUsername(), resource, action );
+        // FIXME use a thread local through cxf interceptors to store this
+        //event.setRemoteIP( getRemoteAddr() );
+
+        for ( AuditListener listener : auditListeners )
+        {
+            listener.auditEvent( event );
+        }
+
+    }
+
     private String removeExpressions( String directory )
     {
         String value = StringUtils.replace( directory, "${appserver.base}",
@@ -410,4 +523,23 @@ public class DefaultManagedRepositoryAdm
         }
         return true;
     }
+
+    protected void addRepositoryRoles( ManagedRepositoryConfiguration 
newRepository )
+        throws RoleManagerException
+    {
+        String repoId = newRepository.getId();
+
+        // TODO: double check these are configured on start up
+        // TODO: belongs in the business logic
+
+        if ( !roleManager.templatedRoleExists( 
ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, repoId ) )
+        {
+            roleManager.createTemplatedRole( 
ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, repoId );
+        }
+
+        if ( !roleManager.templatedRoleExists( 
ArchivaRoleConstants.TEMPLATE_REPOSITORY_MANAGER, repoId ) )
+        {
+            roleManager.createTemplatedRole( 
ArchivaRoleConstants.TEMPLATE_REPOSITORY_MANAGER, repoId );
+        }
+    }
 }

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdmin.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdmin.java?rev=1163025&r1=1163024&r2=1163025&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdmin.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/main/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdmin.java
 Mon Aug 29 21:42:14 2011
@@ -20,6 +20,7 @@ package org.apache.archiva.admin.reposit
 
 
 import org.apache.archiva.admin.repository.RepositoryAdminException;
+import org.codehaus.plexus.redback.users.User;
 
 import java.util.List;
 
@@ -35,14 +36,14 @@ public interface ManagedRepositoryAdmin
     ManagedRepository getManagedRepository( String repositoryId )
         throws RepositoryAdminException;
 
-    Boolean deleteManagedRepository( String repositoryId )
+    Boolean deleteManagedRepository( String repositoryId, User user )
         throws RepositoryAdminException;
 
-    Boolean addManagedRepository( ManagedRepository managedRepository, boolean 
needStageRepo )
+    Boolean addManagedRepository( ManagedRepository managedRepository, boolean 
needStageRepo, User user )
         throws RepositoryAdminException;
 
 
-    Boolean updateManagedRepository( ManagedRepository managedRepository, 
boolean needStageRepo )
+    Boolean updateManagedRepository( ManagedRepository managedRepository, 
boolean needStageRepo, User user )
         throws RepositoryAdminException;
 
 

Modified: 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdminTest.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdminTest.java?rev=1163025&r1=1163024&r2=1163025&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdminTest.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/java/org/apache/archiva/admin/repository/managed/ManagedRepositoryAdminTest.java
 Mon Aug 29 21:42:14 2011
@@ -19,9 +19,12 @@ package org.apache.archiva.admin.reposit
  */
 
 import org.apache.commons.lang.StringUtils;
+import org.codehaus.plexus.redback.users.User;
+import org.codehaus.plexus.redback.users.memory.SimpleUser;
 import org.junit.Test;
 
 import javax.inject.Inject;
+import java.io.File;
 import java.util.List;
 
 /**
@@ -71,20 +74,53 @@ public class ManagedRepositoryAdminTest
         repo.setId( "test-new-one" );
         repo.setName( "test repo" );
         repo.setLocation( APPSERVER_BASE_PATH + repo.getId() );
-        managedRepositoryAdmin.addManagedRepository( repo, false );
+        managedRepositoryAdmin.addManagedRepository( repo, false, 
getFakeUser() );
         repos = managedRepositoryAdmin.getManagedRepositories();
         assertNotNull( repos );
         assertEquals( initialSize + 1, repos.size() );
 
         assertNotNull( managedRepositoryAdmin.getManagedRepository( 
"test-new-one" ) );
 
-        managedRepositoryAdmin.deleteManagedRepository( "test-new-one" );
+        managedRepositoryAdmin.deleteManagedRepository( "test-new-one", 
getFakeUser() );
 
         repos = managedRepositoryAdmin.getManagedRepositories();
         assertNotNull( repos );
         assertEquals( initialSize, repos.size() );
     }
 
+    @Test
+    public void updateDeleteManagedRepo()
+        throws Exception
+    {
+        List<ManagedRepository> repos = 
managedRepositoryAdmin.getManagedRepositories();
+        assertNotNull( repos );
+        int initialSize = repos.size();
+        assertTrue( initialSize > 0 );
+
+        ManagedRepository repo = new ManagedRepository();
+        repo.setId( "test-new-one" );
+        repo.setName( "test repo" );
+        repo.setLocation( APPSERVER_BASE_PATH + repo.getId() );
+        managedRepositoryAdmin.addManagedRepository( repo, false, 
getFakeUser() );
+        repos = managedRepositoryAdmin.getManagedRepositories();
+        assertNotNull( repos );
+        assertEquals( initialSize + 1, repos.size() );
+
+        String newName = "test repo update";
+
+        repo.setName( newName );
+
+        repo.setLocation( APPSERVER_BASE_PATH + "new-path" );
+
+        managedRepositoryAdmin.updateManagedRepository( repo, false, 
getFakeUser() );
+
+        repo = managedRepositoryAdmin.getManagedRepository( "test-new-one" );
+        assertNotNull( repo );
+        assertEquals( newName, repo.getName() );
+        assertEquals( APPSERVER_BASE_PATH + "new-path", repo.getLocation() );
+        assertTrue( new File( APPSERVER_BASE_PATH + "new-path" ).exists() );
+    }
+
 
     private ManagedRepository findManagedRepoById( List<ManagedRepository> 
repos, String id )
     {
@@ -98,4 +134,12 @@ public class ManagedRepositoryAdminTest
         return null;
     }
 
+    User getFakeUser()
+    {
+        SimpleUser user = new SimpleUser();
+        user.setUsername( "root" );
+        user.setFullName( "The top user" );
+        return user;
+    }
+
 }

Added: 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/resources/META-INF/redback/redback-core.xml
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/resources/META-INF/redback/redback-core.xml?rev=1163025&view=auto
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/resources/META-INF/redback/redback-core.xml
 (added)
+++ 
archiva/trunk/archiva-modules/archiva-base/archiva-repository-admin/src/test/resources/META-INF/redback/redback-core.xml
 Mon Aug 29 21:42:14 2011
@@ -0,0 +1,213 @@
+<redback-role-model>
+    <modelVersion>1.0.0</modelVersion>
+    <applications>
+        <application>
+          <id>System</id>
+          <description>Roles that apply system-wide, across all of the 
applications</description>
+        <version>1.0.0</version>
+        <resources>
+            <resource>
+                <id>global</id>
+                <name>*</name>
+                <permanent>true</permanent>
+                <description>global resource implies full access for 
authorization</description>
+            </resource>
+            <resource>
+                <id>username</id>
+                <name>${username}</name>
+                <permanent>true</permanent>
+                <description>replaced with the username of the principal at 
authorization check time</description>
+            </resource>
+        </resources>
+        <operations>
+            <operation>
+                <id>configuration-edit</id>
+                <name>configuration-edit</name>
+                <description>edit configuration</description>
+                <permanent>true</permanent>
+            </operation>
+            <operation>
+                <id>user-management-user-create</id>
+                <name>user-management-user-create</name>
+                <description>create user</description>
+                <permanent>true</permanent>
+            </operation>
+            <operation>
+                <id>user-management-user-edit</id>
+                <name>user-management-user-edit</name>
+                <description>edit user</description>
+                <permanent>true</permanent>
+            </operation>
+            <operation>
+                <id>user-management-user-role</id>
+                <name>user-management-user-role</name>
+                <description>user roles</description>
+                <permanent>true</permanent>
+            </operation>
+            <operation>
+                <id>user-management-user-delete</id>
+                <name>user-management-user-delete</name>
+                <description>delete user</description>
+                <permanent>true</permanent>
+            </operation>
+            <operation>
+                <id>user-management-user-list</id>
+                <name>user-management-user-list</name>
+                <description>list users</description>
+                <permanent>true</permanent>
+            </operation>
+            <operation>
+                <id>user-management-role-grant</id>
+                <name>user-management-role-grant</name>
+                <description>grant role</description>
+                <permanent>true</permanent>
+            </operation>
+            <operation>
+                <id>user-management-role-drop</id>
+                <name>user-management-role-drop</name>
+                <description>drop role</description>
+                <permanent>true</permanent>
+            </operation>
+            <operation>
+                <id>user-management-rbac-admin</id>
+                <name>user-management-rbac-admin</name>
+                <description>administer rbac</description>
+                <permanent>true</permanent>
+            </operation>
+            <operation>
+                <id>guest-access</id>
+                <name>guest-access</name>
+                <description>access guest</description>
+                <permanent>true</permanent>
+            </operation>
+            <operation>
+                <id>user-management-manage-data</id>
+                <name>user-management-manage-data</name>
+                <description>manage data</description>
+                <permanent>true</permanent>
+            </operation>            
+        </operations>
+        <roles>
+            <role>
+                <id>system-administrator</id>
+                <name>System Administrator</name>
+                <permanent>true</permanent>
+                <assignable>true</assignable>
+                <permissions>
+                    <permission>
+                        <id>edit-redback-configuration</id>
+                        <name>Edit Redback Configuration</name>
+                        <operation>configuration-edit</operation>
+                        <resource>global</resource>
+                        <permanent>true</permanent>
+                    </permission>
+                    <permission>
+                        <id>manage-rbac-setup</id>
+                        <name>User RBAC Management</name>
+                        <operation>user-management-rbac-admin</operation>
+                        <resource>global</resource>
+                        <permanent>true</permanent>
+                    </permission>
+                    <permission>
+                        <id>manage-rbac-data</id>
+                        <name>RBAC Manage Data</name>
+                        <operation>user-management-manage-data</operation>
+                        <resource>global</resource>
+                        <permanent>true</permanent>
+                    </permission>                    
+                </permissions>
+                <childRoles>
+                    <childRole>user-administrator</childRole>
+                </childRoles>
+            </role>
+            <role>
+                <id>user-administrator</id>
+                <name>User Administrator</name>
+                <permanent>true</permanent>
+                <assignable>true</assignable>
+                <permissions>
+                    <permission>
+                        <id>drop-roles-for-anyone</id>
+                        <name>Drop Roles for Anyone</name>
+                        <operation>user-management-role-drop</operation>
+                        <resource>global</resource>
+                        <permanent>true</permanent>
+                    </permission>
+                    <permission>
+                        <id>grant-roles-for-anyone</id>
+                        <name>Grant Roles for Anyone</name>
+                        <operation>user-management-role-grant</operation>
+                        <resource>global</resource>
+                        <permanent>true</permanent>
+                    </permission>
+                    <permission>
+                        <id>user-create</id>
+                        <name>Create Users</name>
+                        <operation>user-management-user-create</operation>
+                        <resource>global</resource>
+                        <permanent>true</permanent>
+                    </permission>
+                    <permission>
+                        <id>user-delete</id>
+                        <name>Delete Users</name>
+                        <operation>user-management-user-delete</operation>
+                        <resource>global</resource>
+                        <permanent>true</permanent>
+                    </permission>
+                    <permission>
+                        <id>user-edit</id>
+                        <name>Edit Users</name>
+                        <operation>user-management-user-edit</operation>
+                        <resource>global</resource>
+                        <permanent>true</permanent>
+                    </permission>
+                    <permission>
+                        <id>access-users-roles</id>
+                        <name>Access Users Roles</name>
+                        <operation>user-management-user-role</operation>
+                        <resource>global</resource>
+                        <permanent>true</permanent>
+                    </permission>
+                    <permission>
+                        <id>access-user-list</id>
+                        <name>Access User List</name>
+                        <operation>user-management-user-list</operation>
+                        <resource>global</resource>
+                        <permanent>true</permanent>
+                    </permission>
+                </permissions>
+            </role>
+            <role>
+                <id>registered-user</id>
+                <name>Registered User</name>
+                <permanent>true</permanent>
+                <assignable>true</assignable>
+                <permissions>
+                    <permission>
+                        <id>edit-user-by-username</id>
+                        <name>Edit User Data by Username</name>
+                        <operation>user-management-user-edit</operation>
+                        <resource>username</resource>
+                        <permanent>true</permanent>
+                    </permission>
+                </permissions>
+            </role>
+            <role>
+                <id>guest</id>
+                <name>Guest</name>
+                <permanent>true</permanent>
+                <assignable>true</assignable>
+                <permissions>
+                    <permission>
+                        <id>guest-permission</id>
+                        <name>Guest Permission</name>
+                        <operation>guest-access</operation>
+                        <resource>global</resource>
+                        <permanent>true</permanent>
+                    </permission>
+                </permissions>
+            </role>
+        </roles>
+        </application>
+    </applications>
+</redback-role-model>
\ No newline at end of file


Reply via email to