Tôi đã tạo một ứng dụng web Google Apps ScScript gần với những gì bạn muốn.
QUAN TRỌNG! Trước khi chạy nó trên bất kỳ thư mục nào của bạn, hãy đảm bảo bạn đã kiểm tra nó trên tài khoản khác. Mặc dù tập lệnh dường như hoạt động như dự định, tôi không thể đảm bảo rằng nó sẽ không làm mất quyền của bạn. Vì vậy, hãy xem kỹ tập lệnh, kiểm tra tài liệu về Tập lệnh Google Apps và kiểm tra kỹ trước khi chạy trên bất kỳ dữ liệu sản xuất nào.
Giao diện người dùng của tập lệnh rất thô sơ, vì vậy đừng ngoại trừ bất cứ điều gì lạ mắt.
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();
}
}
Để cài đặt tập lệnh này, hãy truy cập Google Drive của bạn và nhấp vào Mới → Tập lệnh Google Apps . Dán mã và Xuất bản → Phân phối dưới dạng ứng dụng web .
Đặt tập lệnh thành Chạy với tư cách người dùng đã đăng nhập (hoặc tương tự, Google Drive của tôi không bằng tiếng Anh) .
Khi gọi ứng dụng, bạn sẽ được hiển thị phân cấp thư mục của Google Drive. Nhấp vào thư mục sẽ hiển thị cửa sổ bật lên trông xấu xí, nơi bạn có thể chọn thực thi tập lệnh thiết lập lại quyền cho thư mục và các thư mục con của nó (chức năng doResetPermissions
trong mã).
Hàm này lặp qua thư mục và các thư mục con của nó. Đối với mỗi tệp mà nó tìm thấy, nó thực thi file.setSharing
với các giá trị từ thư mục mẹ. Nó cũng kêu gọi file.removeViewer
tất cả người xem đã đăng ký và file.removeEditor
cho tất cả các biên tập viên đã đăng ký.
Kiểm tra tài liệu cho removeViewer và removeEditor để chắc chắn rằng họ làm những gì bạn muốn.
Lưu ý rằng việc thực thi tập lệnh có thể mất một chút thời gian (tùy thuộc vào kích thước cấu trúc thư mục của bạn) và không có phản hồi nào được đưa ra trong khi nó hoạt động, ngoại trừ trong nhật ký chạy tập lệnh ( Xem → Nhật ký ).