Zainstalowałem skrypt Vidara i działa bardzo dobrze dla plików, ale nie zresetowałbym uprawnień do folderów. Więc zmieniłem trochę kod, aby foldery również dziedziczyły uprawnienia z ich górnego folderu.
Dwa ważne zastrzeżenia:
- Nie wiem, czy pierwotnym zamiarem było pozostawienie folderów bez zmian. Lub nawet jeśli zadziałało to dobrze dla wszystkich oprócz mnie, a te rozwiązania były niepotrzebne. To zadziałało dla mnie.
- To pierwszy skrypt, który wykonuję, więc jest bardzo prawdopodobne, że nie jest zbyt wydajny i może zawierać pewne błędy. Popraw go i popraw.
Zmieniłem tylko doResetPermissions
funkcję, ale dla uproszczenia wklejam cały kod.
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();
}
}
Jeśli muszę zresetować uprawnienia do folderu, zmieniam nazwę folderu ( Finanse → Finanse_1 ), tworzę nowy folder ze starą nazwą ( Finanse ) i „przenoszę” wszystkie podfoldery do nowego folderu.
Tym ruchem resetujesz wszystkie uprawnienia do podfolderów.
źródło
Utworzyłem aplikację internetową Google Apps Scripts, która powinna być blisko tego, co chcesz.
WAŻNY! Przed uruchomieniem tego w dowolnym folderze upewnij się, że testujesz go na innym koncie. Chociaż skrypt wydaje się działać zgodnie z przeznaczeniem, nie mogę zagwarantować, że nie zepsuje on twoich uprawnień. Przejrzyj dokładnie skrypt, zapoznaj się z dokumentacją skryptów Google Apps i przetestuj go dokładnie przed uruchomieniem jakichkolwiek danych produkcyjnych.
Interfejs użytkownika skryptu jest bardzo prosty, więc nie wykluczaj niczego wyjątkowego.
Aby zainstalować ten skrypt, przejdź na Dysk Google i kliknij Nowy → Skrypt Google Apps . Wklej kod i opublikuj → Rozpowszechnij jako aplikację internetową .
Ustaw skrypt jako Uruchom jako zalogowany użytkownik (lub podobny, mój Dysk Google nie jest w języku angielskim) .
Podczas wywoływania aplikacji zostanie wyświetlona hierarchia folderów na Dysku Google. Kliknięcie folderu spowoduje wyświetlenie brzydkiego wyskakującego okienka, w którym możesz wykonać skrypt resetowania uprawnień dla folderu i jego podfolderów (funkcja
doResetPermissions
w kodzie).Ta funkcja dokonuje iteracji przez folder i jego podfoldery. Dla każdego znalezionego pliku wykonuje się go
file.setSharing
z wartościami z folderu nadrzędnego. Wzywa takżefile.removeViewer
wszystkich zarejestrowanych przeglądających ifile.removeEditor
wszystkich zarejestrowanych redaktorów.Sprawdź dokumentację removeViewer i removeEditor, aby upewnić się, że robią to, co chcesz.
Pamiętaj, że wykonanie skryptu może zająć trochę czasu (w zależności od wielkości struktury folderów) i nie jest przesyłana żadna informacja zwrotna podczas jego działania, z wyjątkiem dzienników programu uruchamiającego skrypty ( Widok → Dzienniki ).
źródło
Dowiedziałem się, że najlepszym sposobem było
rclone copy
odtworzenie folderu nadrzędnego ze wszystkimi jego plikami, przy jednoczesnej zmianie uprawnień na dowolne wybrane domyślne ustawienia udostępniania.Jeśli tak, powiedzmy, że jeździsz zespołem z wieloma katalogami, po prostu przenieś wszystko do nowego folderu, takiego jak złe uprawnienia. Następnie utwórz nowy pilot w rclone dla tego napędu i użyj go
rclone copy gdrive:bad_permissions gdrive:fixed_permissions
. Ponieważ kopiowanie odbywa się po stronie serwera, unikasz konieczności pobierania / wysyłania.OSTRZEŻENIE : Następnie sprawdziłem skopiowany folder za pomocą narzędzia do porównywania plików, aby upewnić się, że wszystko zostało poprawnie przesłane, a program rclone faktycznie przeoczył dość dużą liczbę plików bez wyświetlania błędów.
źródło
http://gappstips.com/docs-tips/view/98/protect-your-google-drive-folders-by-setting-permissions
zgodnie z tym linkiem wydaje się, że musisz upewnić się, że pliki mają ustawione domyślne uprawnienia, a następnie powinny dziedziczyć z folderu.
edit: ctrl + a zaznacza wszystkie pliki w folderze, a następnie możesz zmienić, komu są one udostępniane wszystkim naraz.
źródło