martes, 11 de febrero de 2014

Ocultar los botones de "descarga" para los usuarios Consumer en Share

Escenario:

Como se sabe los Sitios en Alfresco manejan roles tales como Manager, Collaborator, Contributor y Consumer y un usuario creado puede pertenecer a uno de estos roles según las funciones que deba realizar.


Según el rol que tenga un usuario se le habilitará ciertas funciones en la interfaz de Alfresco Share, como se muestra en la imagen estas son las funciones habilitadas para un caso de usuario Consumer en un documento:

Lo que se desea es ocultar los botones de descarga para el caso de un usuario Consumer, lo que vamos a hacer primero es ocultar los botones 1 y 2. Luego el 3 por ser algo diferente.

Solución

Accedemos a la siguiente ruta dentro de la instalación de nuestro Alfresco: tomcat/shared/classes/alfresco/web-extension/ y abrimos el archivo share-config-custom.xml, antes del cierre </alfrsco-config> agregamos las siguientes lineas:

<!-- Custom DocLibActions config section -->
<config evaluator="string-compare" condition="DocLibActions">
  <actionGroups>
    <actionGroup id="document-browse">
      <action index="100" id="document-download" >
        <permissions>
          <permission allow="true">CreateChildren</permission>
        </permissions>
      </action>
    </actionGroup>
    <actionGroup id="document-details">
      <action index="100" id="document-download" >
        <permissions>
          <permission allow="true">CreateChildren</permission>
        </permissions>
      </action>
    </actionGroup>
  </actionGroups>
</config>

El id document-browser es para ocultar el boton 1 y document-details es para el 2, el tag <permission> se usa para que este boton solo aparezca cuando el usuario tenga permisos específicos. En este caso decimos que deseo que el boton aparezca cuando el usuario tenga permisos de CreateChildren (cosa que el Consumer no tiene). Podemos deshabilitar el boton para otros roles como Contributor o Collaborator usando otros permisos tales como:
  • Read
  • Write
  • WriteContent
  • Delete
  • All
El tag <action> tiene un id que es el nombre de la acción y un atributo index, la lista completa de acciones y sus repsectivos index que podemos modificar están en el archivo share-documentlibrary-config.xml ubicado en share/WEB-INF/classes/alfresco/.

Para deshabilitar el boton 3 se deben modificar directamente archivos del share. Abrir el archivo node-header.get.js ubicado en share/WEB-INF/classes/alfresco/site-webscript/org/alfresco/component/ y agregar la siguiente linea en el if (nodeDetails){...}: 

model.permissions = AlfrescoUtil.getSiteMembership(model.site).role ;

Esto es para habilitar el uso de permisos y roles en la plantilla que vamos a modificar a continuación. Abrir el archivo node-header.get.html.ftl y ubicar el segemento <!-- Download Button --> modificarlo para que se muestre así:

<#if permissions!="SiteConsumer" >
    <#if showDownload == "true" && node.contentURL??>
        <!-- Download Button -->
        <span class="yui-button yui-link-button onDownloadDocumentClick">
            <span class="first-child">
               <a href="${url.context}/proxy/...${msg("button.download")}</a>
            </span>
        </span>
    </#if>
</#if>

En este caso en la plantilla ftl hemos agregado un IF cuando se muestra el boton download para que aparezca solo para usuarios que NO son de tipo Consumer, podemos usar también otros roles según la necesidad.

Guardar los cambios realizados y reiniciar el servicio de Alfresco, los botones 1, 2 y 3 que se muestra gráficos arriba ahora solo se mostrará cuando el usuario NO sea de tipo Consumer.



4 comentarios:

  1. ruta del archivo node-header.get.html.ftl en alfresco 5.0.a:
    ./webapps/share/WEB-INF/classes/alfresco/site-webscripts/org/alfresco/components/node-details/

    Saludos!

    ResponderEliminar
  2. Perfecto Noeh vamos a actualizar el blog con la nueva ruta

    Saludos

    ResponderEliminar
  3. Estimado Oscar muy buena explicación, pero en el if para borrar el número 3 (<#if permissions!="SiteConsumer" > no me reconoce el como rol el "SiteConsumer" como podria imprimir el valor que retorna "permissions"
    Gracias por tu ayuda

    ResponderEliminar
  4. Hola, me ha servido mucho tu post, gracias, tengo una consulta. En la img donde está el "1", cuando selecciono una carpeta o archivo , se habilita en la parte superior "ELEMENTOS SELECCIONADOS" y ahi también sale para descargar o copiar, podrías indicarme en que archivo de alfresco modifico eso o lo oculto nosé, y se podría solo para consumidor. GRACIAS.


    ResponderEliminar