Sincronización de usuarios con campos personalizados entre LDAP y AlfrescoLDAP custom user fileds synchronization with Alfresco

Alfresco permite la posibilidad de sincronizar la información de los usuarios almacenada en un LDAP de forma que cada cierto tiempo se realice un volcado de esta sobre el gestor documental. Por defecto se vuelcan, para cada usuario, los campos de mayor importancia aunque si se deseea existe la posibilidad de añadir más según las necesidades de la organización. Este post pretende precisamente explicar eso, cómo sincronizar los campos que de por sí no se incluyen en la configuración por defecto de Alfresco.

Consideremos dos propiedades que se almacenan para cada usuario en el LDAP pero que Alfresco no está sincronizando, por ejemplo «Teléfono móvil» y «Usuario de Skype», y mostremos cómo sincronizarlas.

Paso 1: Definir propiedades LDAP

Localizamos el fichero en el que se definen las propiedades, este puede ser o bien el  alfresco-global.properties, el ldap-ad-authentication.properties o el ldap-authentication.properties dependiendo de como lo hayamos configurado. En cualquiera de los tres casos podremos ver que las propiedades que se están sincronizando por defecto son las siguientes:

# The attribute name on people objects found in LDAP to use as the uid in Alfresco
ldap.synchronization.userIdAttributeName=sAMAccountName
# The attribute on person objects in LDAP to map to the first name property in Alfresco
ldap.synchronization.userFirstNameAttributeName=givenName
# The attribute on person objects in LDAP to map to the last name property in Alfresco
ldap.synchronization.userLastNameAttributeName=sn
# The attribute on person objects in LDAP to map to the email property in Alfresco
ldap.synchronization.userEmailAttributeName=mail
# The attribute on person objects in LDAP to map to the organizational id  property in Alfresco
ldap.synchronization.userOrganizationalIdAttributeName=company

Pues bien a este fichero debemos añadir las dos filas que se muestran a continuación y que que se corresponden con los campos «Usuario de Skype»y «Teléfono móvil».

ldap.synchronization.userSkypeAttributeName=skypeUser
ldap.synchronization.userMobileAttributeName=mobile

El valor de la izquierda es el nombre que nosotros le hemos querido dado esta propiedad y el de la derecha el atributo que le corresponde en el LDAP (debe ser exactamente el que figura en él sino elmapeo no se realizará).

Paso 2: Localizar propiedades adecuadas en el modelo de Alfresco

Buscamos las propiedades equivalentes en el Content Model de Alfresco para asociarlas y para ello tendremos que localizar el fichero webapps/alfresco/WEB-INF/classes/alfresco/model/contentModel.xml. Una vez abierto debemos escoger qué campos del modelo se corresponden con Usuario de Skype y Teléfono móvil. Serán las siguientes:

<property name="cm:skype">
 <type>d:text</type>
</property>
  
(...)
  
<property name="cm:mobile">
 <type>d:text</type>
</property>

Paso 3: Asociar propiedades LDAP con las de Alfresco

Por último sólo quedará realizar la asociación entre los campos del LDAP y las propiedades que le corresponden en el modelo de Alfresco.

Esto se realiza en el fichero webapps/alfresco/WEB-INF/classes/alfresco/subsystems/Authentication/common-ldap-context.xml  (que debemos ubicar en  shared/classes/alfresco/extension/subsystems/Authentication/ldap/ldap1/custom-ldap-context.xml)

y que una vez editado deberá quedar de la siguiente forma:

 

<property name="personAttributeMapping">
    <map>
        <entry key="cm:userName">
            <value>${ldap.synchronization.userIdAttributeName}</value>
        </entry>
        <entry key="cm:firstName">
            <value>${ldap.synchronization.userFirstNameAttributeName}</value>
        </entry>
        <entry key="cm:lastName">
            <value>${ldap.synchronization.userLastNameAttributeName}</value>
        </entry>
        <entry key="cm:email">
            <value>${ldap.synchronization.userEmailAttributeName}</value>
        </entry>
        <entry key="cm:organization">
            <value>${ldap.synchronization.userOrganizationalIdAttributeName}</value>
        </entry>
        <entry key="cm:organizationId">
            <value>${ldap.synchronization.userOrganizationalIdAttributeName}</value>
        </entry>
        <entry key="cm:homeFolderProvider">
            <null/>
        </entry>
 
        <!-- Nuevas propiedades incluidas -->
 
        <entry key="cm:skype">
            <value>${ldap.synchronization.userSkypeAttributeName}</value>
        </entry>
        <entry key="cm:mobile">
            <value>${ldap.synchronization.userMobileAttributeName}</value>
        </entry>
 
    </map>
</property>