Como cambiar permisos de forma recursiva con Google Apps Script


 En muchas ocasiones nos puede resultar útil cambiar los permisos de un árbol de directorios de Drive , de forma que con una sola llamada a un script nos aseguremos que todos los ficheros y carpetas que cuelgan de la carpeta origen tienen los permisos que nosotros queremos.

Hace un tiempo ya hice un artículo sobre como cambiar permisos de una carpeta de Drive con Google Apps Script, así que tomando ese código de base, ya veréis que es muy fácil implementarlo para que sea recursivo en todo el árbol de carpetas.

Todo lo que hemos de hacer para conseguir recursividad  es llamar a la misma función que estamos creando para cada una de las subcarpetas de la carpeta actual. Dicho así, parece complejo, pero viendo el código Google Apps Script lo tendréis clarísimo:

function SetPermisosRecursivos(folder) 
{
    //Seteamos permisos a la carpeta actual
    folder.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);

    //Inspeccionamos todas las carpetas hijas
    var folders = folder.getFolders();
    while(folders.hasNext())
    {
       SetPermisosRecursivos(folders.next());
    }

    //Seteamos permisos a todos los ficheros de la carpeta actual
    var files = folder.getFiles();
    while(files.hasNext())  
    {
       files.next().setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
    }
}

En este ejemplo todas las carpetas y ficheros que dependan de la carpeta que le pasemos a la función se compartirán con cualquier que tenga el link. Evidentemente podéis cambiar esa linea de código para que los permisos se apliquen como lo necesites en tu caso.

Cualquier duda que tengáis, no vaciléis en hacérmela llegar.

Nos vemos


4 comentarios:

  1. Disculpa bue articulo, me gustaria saber donde meto el Id de mi carpeta principal....

    ResponderEliminar
    Respuestas
    1. Lo que tienes que pasarle a la función es el objeto de folder. Puedes conseguir ese objeto haciendo un DriveApp.getfolderbyid(id) y pasarselo a la función.
      Espero que te sirva, cualquier cosa, dilo. Nos vemos!

      Eliminar
    2. Si amigo gracias es asi folder = DriveApp.getfolderbyid(id);

      Eliminar
    3. Perfecto, encantado de haberte ayudado!

      Nos vemos

      Eliminar

Tal vez te interese