Recientemente me he encontrado con un nuevo problema con Alfresco. De buenas a primeras habían desaparecido todos los permisos asignado a un espacio, y dicho espacio tenía cientos de subespacios con sus permisos y roles. En este caso se pudo salir al paso recuperando la mayor parte de los permisos de un entorno de preproducción.
La forma de hacerlo fue recorriendo de forma recursiva el espacio del entorno de preproducción y guardando sus permisos en un fichero. Este fichero es parseado posteriormente obteniendo un nuevo fichero con las sentencias necesarias para aplicar los permisos sobre el espacio que los había perdido.
La forma de hacerlo fue recorriendo de forma recursiva el espacio del entorno de preproducción y guardando sus permisos en un fichero. Este fichero es parseado posteriormente obteniendo un nuevo fichero con las sentencias necesarias para aplicar los permisos sobre el espacio que los había perdido.
Expongo los scripts:
- backup_permisos.js
//Obtiene el path del espacio
var ruta_origen = (space.displayPath + "/" + space.name).replace("/Empresa/","");
//Crea log en el espacio personal de quien se loga.
var nombre = space.name + "_permisos.log"
var logFile = userhome.childByNamePath(nombre);
if (logFile == null)
{
logFile = userhome.createFile(nombre);
}
logFile.content ="";
var log = "";
//Funcion que recorre un espacio para obtener sus permisos.
function recorre(doc)
{
for each (n in doc.children)
{
if (n.isContainer)
{
cadena_origen = n.displayPath + "/" + n.name;
cadena_destino = cadena_origen.replace("/Empresa/", "");
log += cadena_destino;
if (n.inheritsPermissions())
{
log += ";" + "true" + ";" ;
}
else
{
log += ";" + "false" + ";" ;
}
var cadena = n.getPermissions();
for each (k in cadena)
{
var permisos = k.split(';');
log += permisos[2] + "," + permisos[1] + "|" ;
}
log = log.substring(0, log.length-1);
log += "\n";
recorre (n);
}
}
}
//Comienza main.
//Se obtien los ScriptNode a partir de la ruta de los espacios.
var espacio_origen = companyhome.childByNamePath(ruta_origen);
//Recorremos el espacio origen para dar los permisos al destino.
recorre(espacio_origen);
//Permisos del espacio
cadena_origen = espacio_origen.displayPath + "/" + espacio_origen.name;
cadena_destino = cadena_origen.replace("/Empresa/", "");
log += cadena_destino;
if (espacio_origen.inheritsPermissions())
{
log += ";" + "true" + ";" ;
}
else
{
log += ";" + "false" + ";" ;
}
var cadena_permisos = espacio_origen.getPermissions();
for each (k in cadena_permisos)
{
var permisos = k.split(';');
log += permisos[2] + "," + permisos[1] + "|" ;
}
log = log.substring(0, log.length-1);
log += "\n";
logFile.content += log;
//FIN
Este script lo ejecutaremos como una acción sobre el espacio del cual queremos obtener los permisos asignados. Una vez ejecutado (puede tardar un buen rato, depende de la cantidad de documentos que se tenga) obtendremos en nuestro espacio personal un fichero que recoge los permisos para cada espacio y documento incluido el espacio sobre el que se ha lanzado.
Ese fichero lo parsearemos con el siguiente script en python, el cual nos devolverá un js que podremos ejecutar en alfresco para asignar esos permisos sobre el espacio original en caso de pérdida de permisos.
Ese fichero lo parsearemos con el siguiente script en python, el cual nos devolverá un js que podremos ejecutar en alfresco para asignar esos permisos sobre el espacio original en caso de pérdida de permisos.
- crea_script_permisos.py
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import os, string, sys
#Variables
entrada=sys.argv[1]
script=entrada + "_script.js"
fichero01 = open(entrada, 'r')
fichero02 = open(script, 'w')
for linea_fichero01 in fichero01:
linea=linea_fichero01.split(';')
espacio=linea[0].strip()
herencia=linea[1].strip()
try:
permisos=linea[2].strip()
except:
permisos=""
cadena1="var espacio = companyhome.childByNamePath(" + "\"" + espacio + "\"" + ");"
estructura_if="if ( espacio != null) {"
fin_estructura_if="}"
cadena2="espacio.setInheritsPermissions(" + herencia + ");"
fichero02.write(cadena1 + '\n')
fichero02.write(estructura_if + '\n')
fichero02.write(cadena2 + '\n')
if permisos != "":
lista=permisos.split('|')
for perm in range(len(lista)):
grup=lista[perm].split(',')
permis=grup[0].strip()
user=grup[1].strip()
cadena="espacio.setPermission(" + "\"" + permis + "\"" + "," + "\"" + user + "\"" + ");"
fichero02.write(cadena + '\n')
fichero02.write(fin_estructura_if + '\n')
fichero01.close()
fichero02.close()
estooo... cómo pierde un espacio los permisos ?
ResponderEliminarjejeje....eso me gustaría a mi saber....pero se han perdido....
ResponderEliminar