Desarrollo en Alfresco: cómo ejecutar procesos con privilegios de Administrador

/ / Blog, Business Automation, Digital Development, Document Management
Alfresco BeeCon 2016 podría ser en España
Nuestras impresiones sobre el Global Activiti User Day

En ocasiones se requiere realizar determinadas operaciones en Alfresco con credenciales de administración. A continuación realizamos un repaso de las diferentes técnicas para obtener este comportamiento que existen en las diferentes APIs de Alfresco.

Desde Java

1. Usando AuthenticationUtil.RunAsWork

AuthenticationUtil.runAsSystem(
        new AuthenticationUtil.RunAsWork<Object>() {

            public Object doWork() throws Exception {

                // ...code to be run as Admin...
                return null;

            }
        }
);

2. Usando AuthenticationUtil.setRunAsUserSystem

AuthenticationUtil.pushAuthentication();
try {
    AuthenticationUtil.setRunAsUserSystem();
    // ...code to be run as Admin...
} finally {
    AuthenticationUtil.popAuthentication();
}

3. O usando de una manera alternativa AuthenticationUtil.setRunAsUserSystem

try {
    AuthenticationUtil.setRunAsUserSystem();
    // ...code to be run as Admin...
} finally {
    AuthenticationUtil.clearCurrentSecurityContext();
}

Desde JavaScript de servidor

Usando un script RunAs propio (código fuente basado en Fabio Strozzi)

1. Implementa un objeto raíz JavaScript RunAs

package es.keensoft.alfresco.script.RunAs;

public class RunAs extends BaseScopableProcessorExtension {
    public void work(final Function func) {
        final Context cx = Context.getCurrentContext();
        final Scriptable scope = getScope();

        RunAsWork<Object> raw = new RunAsWork<Object>() {
            public Object doWork() throws Exception {
                func.call(cx, scope, scope, new Object[] {});
                return null;
            }
        };

        AuthenticationUtil.runAs(raw, AuthenticationUtil.getAdminUserName());
    }
}

2. Declara el bean de Spring para que esté disponible en la API de Scripts

<beans>
    <bean id="RunAs" parent="baseJavaScriptExtension" class="es.keensoft.alfresco.script.RunAs">
        <property name="extensionName">
            <value>runAs</value>
        </property>
    </bean>
</beans>

3. Úsalo en cualquier JavaScript

function main() {
    var f = function() {
        // ...code to be run as Admin...
    };
    runAs.work(f);
}

main();

En el descriptor de un WebScript

<webscript>
  <shortname>Test</shortname>
  <description>Test</description>
  <url>/test</url>
  <format default="html">argument</format>
  <!-- Use runas="admin" attribute -->
  <authentication runas="admin">user</authentication>
  <transaction>required</transaction>
</webscript>

Desde JavaScript de cliente

No disponible.

Desde un cliente de CMIS

No disponible, pero usando tickets de Alfresco e integración SSO (CMIS-887) puede conseguirse un comportamiento equivalente.

Unidad de negocio, keensoft

2 Comments to “ Desarrollo en Alfresco: cómo ejecutar procesos con privilegios de Administrador”

  1. Angel Martín Bonilla dice:

    Buenas Angel, estaba buscando información sobre este tema y veo que es posible ejecutar procesos como administrador en Alfresco.

    Resulta que necesito borrar un documento de una carpeta cuando este se copie a otra. Pensé en hacerlo con una regla que ejecutase un script para el borrado del documento de la carpeta origen, pero el usuario que hace la copia no tiene permisos de escritura por lo que ese borrado él mismo no lo puede hacer.

    Así que necesitaría que se ejecute el script como administrador. También veo que se puede hacer por webScript, pero aun no he tocado mucho.

    podrías ayudarme con esto?

    Saludos. Muchas gracias!