Я створив веб-версію скриптів Google Apps, яка повинна бути близькою до того, що ви хочете.
ВАЖЛИВО! Перш ніж запустити це в будь-яку зі своїх папок, переконайтесь, що ви протестували його в іншому обліковому записі. Хоча сценарій, здається, працює за призначенням, я не можу гарантувати, що він не зіпсує ваші дозволи. Тому уважно перегляньте сценарій, ознайомтеся з документацією на сценарії Google Apps і ретельно протестуйте його, перш ніж запускати будь-які виробничі дані.
Користувальницький інтерфейс сценарію дуже рудиментарний, тому не слід виключати нічого фантазійного.
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();
}
}
Щоб встановити цей сценарій, перейдіть на свій Диск Google і натисніть кнопку Створити → Сценарій Google Apps . Вставте код і опублікуйте → Поширити як веб-додаток .
Встановіть сценарій для запуску як зареєстрований користувач (або подібний, мій Диск Google не англійською мовою) .
Після виклику програми вам буде показана ієрархія папок Google Диска. При натисканні на папку з'явиться некрасиве вигляд спливаючого вікна, де ви можете виконати сценарій скидання дозволу для папки та її підпапок (функція doResetPermissions
в коді).
Ця функція повторюється через папку та її підпапки. Для кожного знайденого файла він виконує file.setSharing
значення зі батьківської папки. Він також закликає file.removeViewer
всіх зареєстрованих глядачів та file.removeEditor
всіх зареєстрованих редакторів.
Перевірте документацію на RemoveViewer та removeEditor, щоб переконатися, що вони роблять те, що ви хочете.
Зауважте, що виконання сценарію може зайняти деякий час (залежно від розміру структури вашої папки), і під час його роботи не надається зворотній зв'язок, за винятком журналів запуску сценарію ( Перегляд → Журнали ).