Ich habe das Skript von Vidar installiert und funktioniert sehr gut für Dateien, aber ich habe die Berechtigungen für Ordner nicht zurückgesetzt. Also habe ich den Code ein wenig geändert, damit die Ordner auch die Berechtigungen von ihrem oberen Ordner übernehmen.
Zwei wichtige Haftungsausschlüsse:
- Ich weiß nicht, ob die ursprüngliche Absicht war, Ordner unverändert zu lassen. Oder auch wenn es für alle außer mir gut funktionierte und diese Lösung nicht notwendig war. Es hat bei mir funktioniert.
- Dies ist das erste Skript, das ich mache, daher ist es sehr wahrscheinlich, dass es nicht sehr effizient ist und einige Fehler enthalten kann. Bitte zögern Sie nicht, es zu korrigieren und zu verbessern.
Ich habe nur die doResetPermissions
Funktion geändert , aber aus Gründen der Einfachheit füge ich den gesamten Code ein.
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();
}
}
Wenn ich die Ordnerberechtigungen zurücksetzen muss, benenne ich den Ordner um ( Finanzen → Finanzen_1 ), erstelle einen neuen Ordner mit dem alten Namen ( Finanzen ) und verschiebe alle Unterordner in den neuen Ordner.
Mit dieser Verschiebung setzen Sie alle Berechtigungen für Unterordner zurück.
quelle
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.
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 auchfile.removeViewer
alle registrierten Zuschauer undfile.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 .
quelle
Ich fand heraus, dass die beste Möglichkeit darin bestand,
rclone copy
den übergeordneten Ordner mit allen zugehörigen Dateien neu zu erstellen und die Berechtigungen in die von Ihnen gewählten Standardeinstellungen für die Freigabe zu ändern.Wenn Sie also ein Teamlaufwerk mit einer Reihe von Verzeichnissen haben, verschieben Sie einfach alles in einen neuen Ordner wie bad_permissions. Erstellen Sie dann eine neue Fernbedienung in rclone für dieses Laufwerk und verwenden Sie sie
rclone copy gdrive:bad_permissions gdrive:fixed_permissions
. Da die Kopie serverseitig erfolgt, müssen Sie weder herunterladen noch hochladen.WARNUNG : Ich habe den kopierten Ordner anschließend mit einem Dateivergleichstool überprüft, um sicherzustellen, dass alles ordnungsgemäß übertragen wurde und rclone tatsächlich eine große Anzahl von Dateien übersehen hat, ohne dass Fehler angezeigt wurden.
quelle
http://gappstips.com/docs-tips/view/98/protect-your-google-drive-folder-by-setting-permissions
Laut diesem Link scheint es, als müssten Sie sicherstellen, dass die Dateien auf die Standardberechtigungen eingestellt sind, dann sollten sie vom Ordner erben.
Bearbeiten: Strg + a wählt alle Dateien im Ordner aus und Sie können gleichzeitig ändern, für wen sie freigegeben sind.
quelle