Adding global user id
diff --git a/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/user/LdapUser.java b/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/user/LdapUser.java
index 1965ca3..8ecb1a6 100644
--- a/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/user/LdapUser.java
+++ b/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/user/LdapUser.java
@@ -259,4 +259,10 @@
     {
         this.dn = dn;
     }
+
+    @Override
+    public String getId( )
+    {
+        return userManagerId + ":" + dn;
+    }
 }
diff --git a/redback-users/redback-users-api/src/main/java/org/apache/archiva/redback/users/User.java b/redback-users/redback-users-api/src/main/java/org/apache/archiva/redback/users/User.java
index 392e906..dec23b6 100644
--- a/redback-users/redback-users-api/src/main/java/org/apache/archiva/redback/users/User.java
+++ b/redback-users/redback-users-api/src/main/java/org/apache/archiva/redback/users/User.java
@@ -38,6 +38,17 @@
     // --------------------------------------------------------------------
 
     /**
+     * This should return a global user id. Global user ids are built
+     * <code>MANAGER_ID:USER_IDENTIFIER</code>
+     * User identifier must not be the username but must be unique, e.g. for LDAP it may be the DN.
+     * @return
+     */
+    default String getId() {
+        return getUserManagerId( ) + ":" + getUsername( );
+    }
+
+
+    /**
      * Gets the User Name for this user.
      *
      * This field is required, and should never be empty.
@@ -298,6 +309,6 @@
      * @return userManager id
      */
     String getUserManagerId();
-    
+
 
 }
diff --git a/redback-users/redback-users-providers/redback-users-memory/src/main/java/org/apache/archiva/redback/users/memory/SimpleUser.java b/redback-users/redback-users-providers/redback-users-memory/src/main/java/org/apache/archiva/redback/users/memory/SimpleUser.java
index 2ced415..3bd0710 100644
--- a/redback-users/redback-users-providers/redback-users-memory/src/main/java/org/apache/archiva/redback/users/memory/SimpleUser.java
+++ b/redback-users/redback-users-providers/redback-users-memory/src/main/java/org/apache/archiva/redback/users/memory/SimpleUser.java
@@ -67,51 +67,61 @@
         // no op
     }
 
+    @Override
     public void addPreviousEncodedPassword( String encodedPassword )
     {
         getPreviousEncodedPasswords().add( encodedPassword );
     }
 
+    @Override
     public Date getAccountCreationDate()
     {
         return accountCreationDate;
     }
 
+    @Override
     public int getCountFailedLoginAttempts()
     {
         return countFailedLoginAttempts;
     }
 
+    @Override
     public String getEmail()
     {
         return email;
     }
 
+    @Override
     public String getEncodedPassword()
     {
         return encodedPassword;
     }
 
+    @Override
     public String getFullName()
     {
         return fullName;
     }
 
+    @Override
     public Date getLastLoginDate()
     {
         return lastLoginDate;
     }
 
+    @Override
     public Date getLastPasswordChange()
     {
         return lastPasswordChange;
     }
 
+    @Override
     public String getPassword()
     {
         return password;
     }
 
+    @Override
     public List<String> getPreviousEncodedPasswords()
     {
         if ( previousEncodedPasswords == null )
@@ -121,103 +131,124 @@
         return previousEncodedPasswords;
     }
 
+    @Override
     public String getUsername()
     {
         return username;
     }
 
+    @Override
     public boolean isLocked()
     {
         return locked;
     }
 
+    @Override
     public void setAccountCreationDate( Date accountCreationDate )
     {
         this.accountCreationDate = accountCreationDate;
     }
 
+    @Override
     public void setCountFailedLoginAttempts( int countFailedLoginAttempts )
     {
         this.countFailedLoginAttempts = countFailedLoginAttempts;
     }
 
+    @Override
     public void setEmail( String email )
     {
         this.email = email;
     }
 
+    @Override
     public void setEncodedPassword( String encodedPassword )
     {
         this.encodedPassword = encodedPassword;
     }
 
+    @Override
     public void setFullName( String fullName )
     {
         this.fullName = fullName;
     }
 
+    @Override
     public void setLastLoginDate( Date lastLoginDate )
     {
         this.lastLoginDate = lastLoginDate;
     }
 
+    @Override
     public void setLastPasswordChange( Date lastPasswordChange )
     {
         this.lastPasswordChange = lastPasswordChange;
     }
 
+    @Override
     public void setLocked( boolean locked )
     {
         this.locked = locked;
     }
 
+    @Override
     public void setPassword( String password )
     {
         this.password = password;
     }
 
+    @Override
     public void setPreviousEncodedPasswords( List<String> previousEncodedPasswords )
     {
         this.previousEncodedPasswords = previousEncodedPasswords;
     }
 
+    @Override
     public void setUsername( String username )
     {
         this.username = username;
     }
 
+    @Override
     public boolean isPasswordChangeRequired()
     {
         return passwordChangeRequired;
     }
 
+    @Override
     public void setPasswordChangeRequired( boolean passwordChangeRequired )
     {
         this.passwordChangeRequired = passwordChangeRequired;
     }
 
+    @Override
     public boolean isPermanent()
     {
         return permanent;
     }
 
+    @Override
     public void setPermanent( boolean permanent )
     {
         this.permanent = permanent;
     }
 
+    @Override
     public boolean isValidated()
     {
         return validated;
     }
 
+    @Override
     public void setValidated( boolean validated )
     {
         this.validated = validated;
     }
 
+    @Override
     public String getUserManagerId()
     {
         return "simple";
     }
+
 }