AnsweredAssumed Answered

Eliminar permisos y herencia de espacios

Question asked by nemrp on Aug 2, 2011
Latest reply on Aug 8, 2011 by cristinamr
Buenas.

Aquí estoy de nuevo para hacer un aporte. Es pequeñito, pero bueno, quizás pueda servirle a alguien. Hay que tener en cuenta que tan sólo lo he probado en Alfresco 3.4, por lo que me pasaré por aquí cuando lo haya probado en un Alfresco 2.2, que es mi verdadera intención con este script.

El código está comentado, pero si hay alguna duda con respecto a alguna línea ya sabéis :wink:. Lo que sí me gustaría es que me indicáseis aquello que viérais que se puede mejorar o que esté incorrecto.


/* ******************************************************************************************************** */
/* Script que permite el borrado de permisos establecidos en los subespacios a partir del espacio donde    */
/* se ejecute.                                                      */
/*                                                            */
/* Una vez finalizado genera un archivo de log, en el mismo espacio donde se ejecute, que mostrara todas   */
/* las incidencias surgidas en el proceso.                                       */
/*                                                            */
/* Las constantes "group" y "permission" determinan a que grupo o usuario se quiere eliminar el permiso.   */
/* Por otro lado, la constante "spaceDestinity" indica el espacio padre a partir del cual se comenzara a   */
/* ejecutar el script (excluyendolo a el).                                       */
/*                                                            */
/* Ademas elimina la herencia de permisos en dichos subespacios (linea 62).                  */
/* ******************************************************************************************************** */

/* Constantes */
var spaceDestinity = space; // Espacio destino. Aquel donde se va almacenar el log y a partir del cual se van a borrar los permisos.
var state = "ALLOWED"; // Estado del permiso. "ALLOWED" indica que el estado del permiso es "permitido" o esta "activado".
var group = "GROUP_EVERYONE"; // Grupo o usuario. Indica el grupo o usuario al que se le quiere quitar el permiso.
var permission = "Consumer"; // Permiso. Indica el permiso que se quiere quitar.
var date = new Date(); // Objeto fecha que permitira crear el archivo de log unico.

/* Adaptacion del objeto fecha al formato espanol */
var month = date.getMonth() + 1;
if (month > 0 && month < 10) {
month = "0" + month;
}

var day = date.getDate() + 1;
if (day > 0 && day < 10) {
day = "0" + day;
}

/* Creacion del archivo de log en el espacio destino */
var logFileName = "permissions_deleted_" + date.getFullYear() + month + day + date.getHours() + date.getMinutes() + date.getSeconds() + ".txt";
var logFile = spaceDestinity.childByNamePath(logFileName);
var log = "";

if (logFile == null) {
   logFile = spaceDestinity.createFile(logFileName);
}

/* Llamada a la funcion */
deletePermissions();

/* Funcion */
function deletePermissions() {
   // Se obtiene la lista de nodos (espacios y contenidos) hijos.
   var childrenList = spaceDestinity.children;
   
   log = "************** PERMISSIONS DELETED **************\n\n";
   log += "Permissions to delete:\n";
   log += "\tState: " + state + " | " + "Group: " + group + " | " + "Permission: " + permission + "\n\n";
   
    for (var i = 0; i < childrenList.length; i++) {
      // Se obtiene el primer nodo (espacio o contenido).
      nodeVar = childrenList[i];
      
      if (nodeVar.isContainer) {
         log += nodeVar.name + ":\n";
         
         if (nodeVar.hasPermission("ChangePermissions")) {
            // Se deshabilita la herencia de permisos al nodo (espacio o contenido).
            nodeVar.setInheritsPermissions(false);
            
            // Se obtienen los permisos del nodo (espacio o contenido).
            var permissions = nodeVar.permissions;
            var result=[];
            
            // Se itera por los permisos identificando aquellos que se quieren eliminar.
            for (var j = 0; j < permissions.length; j++) {
               var result = permissions[j].split(";");
               var resultState = result[0];
               var resultGroup = result[1];
               var resultPermission = result[2];
               
               if (resultState == state && resultGroup == group && resultPermission == permission) {
                  // Dependiendo de la version utilizada el prototipo del metodo cambia. Asi, el
                  // prototipo para una 3.x es como se muestra a continuacion, mientras que para
                  // un version 2.x es la que aparece una linea mas abajo.
                  //nodeVar.removePermission(group, permission);
                  nodeVar.removePermission(permission, group);
                  log += "\tState: " + resultState + " | " + "Group: " + resultGroup + " | " + "Permission: " + resultPermission;
                  log += "\t—>\tPermission deleted.\n";
               } else {
                  log += "\tState: " + resultState + " | " + "Group: " + resultGroup + " | " + "Permission: " + resultPermission;
                  log += "\t—>\tPermission not deleted.\n";
               }
            }
         } else {
            log += "\tHis role does not allow you to change the permissions of this space.\n\n";
         }

                        // Se hacen perisistentes los cambios. Esta llamada es valida para versiones 2.x, siendo
         // opcional para versiones 3.x.
         nodeVar.save();
      }
   }
}

/* Insercion del texto de log */
log += "**************** END OF DELETION ****************";
logFile.content += log;
logFile.save();
logFile.content

Saludos.

PD: Edito el post para que el código contemple los cambios comentados en posts sucesivos.

Outcomes