Durante los últimos dos meses un equipo mixto de zylk y Bilbomatica ha estado desarrollando, conjuntamente con personal de la UPV/EHU (Gabriel Maqueda y Alberto Soto), un portlet para la sincronización de usuarios en las comunidades de Liferay(version 6 EE). El escenario es el de una organización o universidad con miles de usuarios potenciales, administrados y centralizados en un sistema de directorio activo o LDAP corporativo, que necesita asignar de una manera flexible, ágil y programada un conjunto de usuarios en las diferentes comunidades de un portal Liferay.
Los requisitos que se pretendía cubrir eran los siguientes:
- Poder delegar en los administradores de las comunidades la sincronización de los usuarios que pertenezcan a las mismas, siendo el origen de la sincronización el LDAP corporativo de la UPV/EHU.
- Permitir que los administradores de las comunidades puedan, sin tener conocimientos de la estructura del LDAP ni de la sintaxis de las querys, definir filtros para realizar la sincronización de dichos usuarios
- Permitir la planificación de las sincronizaciones con periodicidad variable y seleccionable por el propio administrador de la comunidad.
- Enviar informes cada vez que se ejecute una sincronización a una lista de usuarios definidos por el propio administrador.
- Traducción al euskera, tanto del interfaz como del asistente para las querys del LDAP, así como del informe resultante tras la sincronización de los usuarios de comunidades.
Nos planteamos primero resolver la duda técnica que teníamos antes de empezar el proyecto
- Usar o no el planificador de tareas que Liferay integra, basado en quartz.
La conclusión fue que se podría hacer uso del planificador de tareas de Liferay con su modelo, lo cual permitía no tener que instanciar dos planificadores y que el propio portal sea capaz de gestionar parte de las tareas de manera transparente. Para ello el porltet se desplegó implementando el scheduler de Liferay con una periodicidad diaria y en la implementación del scheduler es donde se realiza la lógica de qué tareas de sincronización se deben ejecutar cada día.
Una vez decidida la arquitectura de la solución procedimos a su implementación. Desde un punto de vista funcional las características del desarrollo son las siguientes:
- Altas en comunidad
- Bajas en comunidad.
- Importar del LDAP
El portlet permite personalizar los informes de la siguiente forma:
- Seleccionar el idioma en que se generarán los informes. Los informes se podrán obtener tanto en castellano como en euskera.
- Seleccionar el momento preciso en el que se va a realizar el informe o informes dependiendo del modo en que este se configure.
- Obtener informes personalizados atendiendo a características y a valores concretos.
- Gestionar y añadir destinatarios. Estos destinatarios recibirán los informes a través de su correo electrónico.
- Enviar el mismo informe a múltiples destinatarios.
- Seleccionar los datos que mostrará el informe.
En cuanto a la gestión de la expresión de LDAP de la cual se obtienen los usuarios que se van a sincronizar, el portlet dispone de un editor, desde donde el administrador de la comunidad puede seleccionar una característica y un valor. Además el usuario dispone de operadores lógicos ( AND, OR & NOT ), para poder realizar expresiones más complejas.
Cada comunidad dispone de una tarea que puede configurar para la sincronización como se muestra en la siguiente imagen:

El portlet está accesible desde el panel de control de cada comunidad, para los usuarios con rol de administrador de la comunidad.
La configuración se realiza desde la siguiente pantalla:

Además se puede definir la query de LDAP que nos devolverá los usuarios que se vayan a sincronizar:

También se pueden gestionar los destinatarios de las notificaciones:

Como temas destacables habría que resaltar:
- La gestión de los atributos del LDAP es fácilmente extendible para que se pueda utilizar en un conjunto amplio de estructuras de LDAP. En el caso de la UPV/EHU el LDAP está basado en atributos, pero se podría usar en una estructura jerárquica. En zylk lo hemos probado con nuestro LDAP con resultados satisfactorios.
- En una evolución de este desarrollo, se podría ampliar la parte de edición de receptores del informe, de manera que se pudieran añadir nuevos receptores a partir de los usuarios existentes en el portal. Así pues, la selección del idioma del informe se realizaría de manera transparente para el usuario del portlet y a partir de la configuración personal de idioma seleccionada por el usuario.
- Se intentó crear un hook para que el portlet se integrara como una nueva acción en el portlet de comunidades pero no funcionó correctamente, así que se descartó esa posibilidad. Nos faltó mirar los listas blancas de portlets que se pueden añadir en tiempo de ejecución para ver si esa opción era viable.