Ich habe eine Google Apps Scripts-Webanwendung erstellt, die genau Ihren Vorstellungen entspricht.
WICHTIG! Bevor Sie dies in einem Ihrer Ordner ausführen, stellen Sie sicher, dass Sie es in einem anderen Konto testen. Obwohl das Skript wie beabsichtigt zu funktionieren scheint, kann ich nicht garantieren, dass es Ihre Berechtigungen nicht verfälscht. Lesen Sie das Skript daher sorgfältig durch, lesen Sie die Dokumentation zu Google Apps Scripts und testen Sie es gründlich, bevor Sie Produktionsdaten ausführen.
Die Benutzeroberfläche des Skripts ist sehr rudimentär, also nichts Besonderes.
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 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();
for (var i = 0; i < viewers.length; i++) {
Logger.log(" Removing viewer " + viewers[i].getEmail());
file.removeViewer(viewers[i]);
}
var editors = file.getEditors();
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();
}
}
Wechseln Sie zum Installieren dieses Skripts zu Ihrem Google Drive und klicken Sie auf Neu → Google Apps-Skript . Fügen Sie den Code ein und wählen Sie Veröffentlichen → Als Web-App verteilen .
Stellen Sie das Skript so ein, dass es als angemeldeter Benutzer ausgeführt wird (oder ähnlich, mein Google Drive ist nicht in Englisch) .
Beim Aufrufen der App wird die Ordnerhierarchie Ihres Google Drive angezeigt. Wenn Sie auf einen Ordner klicken, wird ein hässliches Popup-Fenster angezeigt, in dem Sie ein Skript zum Zurücksetzen von Berechtigungen für den Ordner und seine Unterordner (die Funktion doResetPermissions
im Code) ausführen können.
Diese Funktion durchläuft den Ordner und seine Unterordner. Für jede gefundene Datei wird sie file.setSharing
mit Werten aus dem übergeordneten Ordner ausgeführt. Es werden auch file.removeViewer
alle registrierten Zuschauer und file.removeEditor
alle registrierten Redakteure angerufen.
Überprüfen Sie die Dokumentation für removeViewer und removeEditor , um sicherzustellen, dass sie das tun, was Sie wollen.
Beachten Sie, dass die Ausführung des Skripts einige Zeit dauern kann (abhängig von der Größe Ihrer Ordnerstruktur). Während der Ausführung wird außer in den Skript-Runner-Protokollen ( Ansicht → Protokolle ) kein Feedback gegeben .