Instalé el script de Vidar y funciona muy bien para los archivos, pero no restablecí los permisos en las carpetas. Entonces, cambié un poco el código para que las carpetas también hereden los permisos de su carpeta superior.
Dos renuncias importantes:
- No sé si la intención original era dejar las carpetas sin cambios. O incluso si funcionó bien para todos menos para mí, y esta solución fue innecesaria. Funcionó para mi.
- Este es el primer script que hago, por lo que es muy probable que no sea muy eficiente y pueda contener algunos errores. Por favor, siéntase libre de corregirlo y mejorarlo.
Solo cambié la doResetPermissions
función, pero pegué todo el código por razones de simplicidad.
var selectedFolder;
var dialog;
function doGet() {
var app = UiApp.createApplication();
var heading = app.createHTML("<h1>Folders for</h1>");
app.add(heading);
var allFoldersIterator = DriveApp.getFolders();
var text = app.createTextArea().setName("text").setId("output");
app.add(text);
var tree = app.createTree();
var rootFolder = DriveApp.getRootFolder();
var treeRoot = app.createTreeItem(rootFolder.getName()).setId(rootFolder.getId());
var handler = app.createServerHandler("folderSelected");
tree.addItem(treeRoot);
tree.addSelectionHandler(handler);
treeRoot.setState(true);
createBranch(rootFolder, treeRoot, app);
app.add(tree);
var selectedFolderIdBox = app.createTextBox().setName("selectedFolderIdBox").setId("selectedFolderIdBox");
app.add(selectedFolderIdBox);
return app;
}
function createBranch(folder, branch, app) {
var children = folder.getFolders();
while (children.hasNext()) {
child = children.next();
Logger.log("Folder id: " + child.getId());
var subBranch = app.createTreeItem(child.getName()).setId(child.getId());
branch.addItem(subBranch);
createBranch(child, subBranch, app);
}
}
function folderSelected(eventInfo) {
var app = UiApp.getActiveApplication();
var parameter = eventInfo.parameter;
Logger.log("Selected " + eventInfo.parameter.selected);
selectedFolder = DriveApp.getFolderById(eventInfo.parameter.selected);
var selectedFolderIdBox = app.getElementById("selectedFolderIdBox");
selectedFolderIdBox.setValue(eventInfo.parameter.selected);
var okHandler = app.createServerHandler("okResetPermissions");
okHandler.addCallbackElement(selectedFolderIdBox);
dialog = app.createDialogBox(true, true);
var panel = app.createFlowPanel();
dialog.add(panel);
dialog.setId("confirmationDialog");
dialog.setPopupPosition(100, 100).setSize(500, 500);
panel.add(app.createLabel("Do you want to reset permissions for all files found in folder " + selectedFolder.getName() + " and its subfolders?\n (Click outside of the dialog box to cancel)"));
panel.add(app.createButton("Do it!", okHandler));
dialog.show();
return app;
}
function okResetPermissions(eventInfo) {
var selectedFolderId = eventInfo.parameter.selectedFolderIdBox;
var selectedFolder = DriveApp.getFolderById(selectedFolderId);
Logger.log("Resetting permissions on " + selectedFolder.getName());
var app = UiApp.getActiveApplication();
app.getElementById("confirmationDialog").hide();
Logger.log("Confirmation dialog hidden");
var progressIndicator = app.createDialogBox(false, true);
progressIndicator.setId("progressIndicator");
progressIndicator.setPopupPosition(100, 100).setSize(500, 500);
var label = app.createLabel("Working ...");
progressIndicator.add(label);
progressIndicator.show();
doResetPermissions(selectedFolder, function() {
var app = UiApp.getActiveApplication();
var progressIndicator = app.getElementById("progressIndicator");
progressIndicator.hide();
return app;
});
return app;
}
function doResetPermissions(selectedFolder, callback) {
Logger.log("Resetting permissions on folder " + selectedFolder.getName());
var sharingAccess = selectedFolder.getSharingAccess();
var sharingPermission = selectedFolder.getSharingPermission();
var viewersfolder = selectedFolder.getViewers();
Logger.log("Number of Viewers in folder: " + selectedFolder.getName() + " = " + viewersfolder.length);
for (var i = 0; i < viewersfolder.length; i++) {
Logger.log(" Removing viewer " + viewersfolder[i].getEmail());
selectedFolder.removeViewer(viewersfolder[i]);
}
var editorsfolder = selectedFolder.getEditors();
Logger.log("Number of Editors in folder: " + selectedFolder.getName() + " = " + editorsfolder.length);
for (var i = 0; i < editorsfolder.length; i++) {
Logger.log(" Removing editor " + editorsfolder[i].getEmail());
selectedFolder.removeEditor(editorsfolder[i]);
}
var files = selectedFolder.getFiles();
while (files.hasNext()) {
var file = files.next();
Logger.log(" Resetting permissions on file " + file.getName());
file.setSharing(sharingAccess, sharingPermission);
var viewers = file.getViewers();
Logger.log("Number of Viewers in file: " + file.getName() + " = " + viewers.length);
for (var i = 0; i < viewers.length; i++) {
Logger.log(" Removing viewer " + viewers[i].getEmail());
file.removeViewer(viewers[i]);
}
var editors = file.getEditors();
Logger.log("Number of editors in file: " + file.getName() + " = " + editors.length);
for (var i = 0; i < editors.length; i++) {
Logger.log(" Removing editor " + editors[i].getEmail());
file.removeEditor(editors[i]);
}
}
var children = selectedFolder.getFolders();
while (children.hasNext()) {
var child = children.next();
doResetPermissions(child);
}
if (callback) {
callback();
}
}
Si necesito restablecer los permisos de la carpeta, cambio el nombre de la carpeta ( Finanzas → Finanzas_1 ), creo una nueva carpeta con el nombre anterior ( Finanzas ) y "muevo" todas las subcarpetas a la nueva carpeta.
Con este movimiento, restablece todos los permisos para subcarpetas.
fuente
He creado una aplicación web de Google Apps Scripts que debería estar cerca de lo que quieres.
¡IMPORTANTE! Antes de ejecutar esto en cualquiera de sus carpetas, asegúrese de probarlo en otra cuenta. Aunque el script parece estar funcionando según lo previsto, no puedo garantizar que no alterará sus permisos. Por lo tanto, revise el script con cuidado, consulte la documentación de los scripts de Google Apps y pruébelo a fondo antes de ejecutar cualquier dato de producción.
La interfaz de usuario de la secuencia de comandos es muy rudimentaria, así que no excepto nada lujoso.
Para instalar este script, vaya a su Google Drive y haga clic en Nuevo → Script de Google Apps . Pegue el código y Publique → Distribuya como aplicación web .
Configure la secuencia de comandos para Ejecutar como usuario conectado (o similar, mi Google Drive no está en inglés) .
Al invocar la aplicación, se le mostrará la jerarquía de carpetas de su Google Drive. Al hacer clic en una carpeta, aparecerá una ventana emergente de aspecto feo, donde puede elegir ejecutar un script de restablecimiento de permisos para la carpeta y sus subcarpetas (la función
doResetPermissions
en el código).Esta función itera a través de la carpeta y sus subcarpetas. Para cada archivo que encuentra, se ejecuta
file.setSharing
con valores de la carpeta principal. También llamafile.removeViewer
a todos los espectadores registrados yfile.removeEditor
a todos los editores registrados.Consulte la documentación de removeViewer y removeEditor para asegurarse de que hacen lo que desea.
Tenga en cuenta que la ejecución de la secuencia de comandos puede llevar algún tiempo (dependiendo del tamaño de la estructura de su carpeta), y no se proporcionan comentarios mientras está funcionando, excepto en los registros de la secuencia de comandos ( Ver → Registros ).
fuente
Descubrí que la mejor manera era usar
rclone copy
para recrear la carpeta principal con todos sus archivos, mientras cambiaba los permisos a la configuración de uso compartido predeterminada que eligió.Entonces, si tiene, digamos que un equipo maneja con un montón de directorios, simplemente mueva todo a una nueva carpeta como bad_permissions. Luego cree un nuevo control remoto en rclone para esa unidad y úselo
rclone copy gdrive:bad_permissions gdrive:fixed_permissions
. Como la copia se realiza en el lado del servidor, evita tener que descargar / cargar.ADVERTENCIA : Luego verifiqué la carpeta copiada con una herramienta de comparación de archivos para asegurarme de que todo se había transferido correctamente y que rclone realmente había perdido una gran cantidad de archivos sin mostrar ningún error.
fuente
http://gappstips.com/docs-tips/view/98/protect-your-google-drive-folders-by-setting-permissions
de acuerdo con ese enlace, parece que debe asegurarse de que los archivos estén configurados con los permisos predeterminados y luego deben heredar de la carpeta.
edit: ctrl + a selecciona todos los archivos en la carpeta y luego puede cambiar con quién se comparten todos a la vez.
fuente