मैंने एक Google Apps Scripts Webapp बनाया है जो आपको चाहिए उसके करीब होना चाहिए।
महत्वपूर्ण! अपने किसी भी फ़ोल्डर पर इसे चलाने से पहले, सुनिश्चित करें कि आप इसे किसी अन्य खाते पर परीक्षण करें। हालाँकि स्क्रिप्ट उद्देश्य के अनुसार काम कर रही है, मैं इस बात की कोई गारंटी नहीं दे सकता कि यह आपकी अनुमतियों को गड़बड़ नहीं करेगा। इसलिए स्क्रिप्ट को ध्यान से देखें, Google Apps लिपियों के लिए दस्तावेज़ीकरण देखें , और किसी भी उत्पादन डेटा पर चलने से पहले अच्छी तरह से परीक्षण करें।
स्क्रिप्ट का UI बहुत अल्पविकसित है, इसलिए कुछ भी कल्पना को छोड़कर नहीं।
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
लिए , और सभी पंजीकृत संपादकों के लिए भी कॉल करता है ।
निष्कासन और निष्कासन के लिए दस्तावेज़ीकरण की जाँच करें यह सुनिश्चित करने के लिए कि वे वही करें जो आप चाहते हैं।
ध्यान दें कि स्क्रिप्ट को निष्पादित करने में कुछ समय लग सकता है (आपके फ़ोल्डर संरचना के आकार पर निर्भर करता है), और काम करते समय कोई प्रतिक्रिया नहीं दी जाती है, केवल स्क्रिप्ट रनर लॉग्स में ( देखें → लॉग्स )।