मैं सभी सबफ़ोल्डर में Google डिस्क दस्तावेज़ों के लिए अनुमतियां कैसे रीसेट करूं?


14

ठीक है, मैंने इसके लिए उत्तर के लिए हर जगह देखा है और इसे खोजने में सक्षम नहीं लगता।

हम अपने Google ड्राइव को व्यवस्थित करने का प्रयास कर रहे हैं ताकि सही लोगों को बहुत सी स्पष्ट साझेदारी के बिना सही चीजों तक पहुंच प्राप्त हो सके। हमारे पास "व्यवस्थापक", "वित्त", "एचआर", "इंजीनियरिंग" और इतने पर के लिए उप-फ़ोल्डर्स के साथ "कंपनी" नामक एक शीर्ष-स्तरीय फ़ोल्डर है। उप-फ़ोल्डर में शीर्ष-स्तर एक की तुलना में अधिक प्रतिबंधात्मक अनुमति है।

अब हमें कमोबेश हर चीज सही जगह मिल गई है, और ज्यादातर यही काम करती है। समस्या यह है कि व्यक्तिगत फ़ाइलों या फ़ोल्डरों की अपनी अनुमतियां हैं - फिर वे अपने फ़ोल्डरों से अनुमतियों को इनहेरिट नहीं करते हैं। हम पदानुक्रम के प्रत्येक भाग में हर चीज के लिए अनुमतियों को कैसे रीसेट करते हैं ताकि वे मूल फ़ोल्डर के समान हों?

विंडोज सर्वर या मैक ओएस एक्स पर एक आइटम के लिए "विरासत में मिला" और "स्पष्ट" अनुमतियों के बीच एक स्पष्ट अंतर है, और एक पदानुक्रम में सभी वस्तुओं के लिए "स्पष्ट" अनुमतियों को हटाना आसान है। जीडी के लिए यह कहां है?

जवाबों:


3

मैंने विडार की स्क्रिप्ट स्थापित की और फ़ाइलों के लिए बहुत अच्छी तरह से काम करता है, लेकिन फ़ोल्डर्स पर अनुमतियों को रीसेट नहीं करेगा। इसलिए, मैंने फोल्डर बनाने के लिए कोड को थोड़ा बदल दिया और उनके ऊपरी फ़ोल्डर से अनुमतियाँ भी प्राप्त कर लीं।

दो महत्वपूर्ण अस्वीकरण:

  1. मुझे नहीं पता कि मूल इरादा फ़ोल्डर को अपरिवर्तित छोड़ने का था। या यहां तक ​​कि अगर यह हर किसी के लिए अच्छी तरह से काम करता है, लेकिन मुझे और यह समाधान अनावश्यक था। इसने मेरे लिए काम किया।
  2. यह पहली स्क्रिप्ट है जो मैं करता हूं, इसलिए यह बहुत संभावना है कि यह बहुत कुशल नहीं है और कुछ त्रुटियों को रोक सकता है। कृपया इसे सुधारने और इसे सुधारने के लिए स्वतंत्र महसूस करें।

मैंने केवल doResetPermissionsफ़ंक्शन को बदल दिया है, लेकिन मैं सरलता के कारणों के लिए सभी कोड पेस्ट करता हूं।

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();
  }
}

1
यह अच्छा है, इसके अलावा यह गैर-Google- ized फ़ाइलों (जैसे अपलोड की गई PDF और DOCX फ़ाइलों) को हटाता है।
user683

ठीक है कि सिर्फ मेरे लिए काम नहीं करेगा तो @ user683। स्क्रिप्ट में यह फ़ाइलों को "डिलीट" कहाँ करता है? इतना खतरनाक है! यह स्क्रिप्ट अनुमतियाँ सेट करने वाली है, फ़ाइलों को हटाने की नहीं!
अरवो बोवेन

3

यदि मुझे फ़ोल्डर अनुमतियों को रीसेट करने की आवश्यकता है, तो मैं फ़ोल्डर का नाम बदल देता हूं ( वित्त → वित्त_1 ), पुराने नाम ( वित्त ) के साथ नया फ़ोल्डर बनाएं , और नए फ़ोल्डर में सभी उप-फ़ोल्डर्स को "स्थानांतरित" करें।

इस कदम के साथ, आप सबफ़ोल्डर के लिए सभी अनुमतियों को रीसेट करते हैं।


2

मैंने एक 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लिए , और सभी पंजीकृत संपादकों के लिए भी कॉल करता है ।

निष्कासन और निष्कासन के लिए दस्तावेज़ीकरण की जाँच करें यह सुनिश्चित करने के लिए कि वे वही करें जो आप चाहते हैं।

ध्यान दें कि स्क्रिप्ट को निष्पादित करने में कुछ समय लग सकता है (आपके फ़ोल्डर संरचना के आकार पर निर्भर करता है), और काम करते समय कोई प्रतिक्रिया नहीं दी जाती है, केवल स्क्रिप्ट रनर लॉग्स में ( देखें → लॉग्स )।


CreateBrance का उपयोग CreateBrance के भीतर किया जाता है? क्या वह काम करता है?
याकूब जान टुंस्ट्रा

1
हाँ, यह ठीक काम करना चाहिए। यह एक पुनरावर्ती कार्य है।
विदर्भ एस। रामदल

0

मुझे पता चला कि rclone copyपैरेंट फोल्डर को फिर से फाइल करने के लिए सबसे अच्छा तरीका यह था कि आप जो भी डिफॉल्ट शेयरिंग सेटिंग चुने, उसमें परमिशन बदल दें।

यदि आपके पास है, तो एक टीम को निर्देशिकाओं के एक समूह के साथ ड्राइव करें, बस सब कुछ एक नए फ़ोल्डर में स्थानांतरित करें जैसे कि bad_permissions। फिर उस ड्राइव और उपयोग के लिए rclone में एक नया रिमोट बनाएं rclone copy gdrive:bad_permissions gdrive:fixed_permissions। चूंकि कॉपी सर्वर-साइड होती है, आप डाउनलोड / अपलोड करने से बचते हैं।

चेतावनी : मैंने कॉपी किए गए फ़ोल्डर को एक फ़ाइल तुलना उपकरण के साथ जाँच की ताकि यह सुनिश्चित हो सके कि सब कुछ ठीक से स्थानांतरित हो गया है और वास्तव में किसी भी त्रुटि को प्रदर्शित किए बिना फाइल की बड़ी मात्रा में चूक हुई थी।


-1

http://gappstips.com/docs-tips/view/98/protect-your-google-drive-folders-by-setting-permissions

उस लिंक के अनुसार ऐसा लगता है कि आपको यह सुनिश्चित करने की आवश्यकता है कि फाइलें डिफ़ॉल्ट अनुमतियों पर सेट हैं, फिर उन्हें फ़ोल्डर से इनहेरिट करना चाहिए।

संपादित करें: ctrl + फ़ोल्डर में सभी फ़ाइलों का चयन करता है तो आप बदल सकते हैं कि वे किसके साथ साझा किए जाते हैं।


1
मुझे लगता है कि ओपी यह जानना चाहता है कि आप एक ही बार में सभी दस्तावेजों के लिए डिफ़ॉल्ट को कैसे रीसेट कर सकते हैं ।
विदर्भ एस। रामदल

1
हमारे पास कई फोल्डर हैं। कैसे उन सभी फ़ाइलों के लिए पुनरावर्ती यह करने के लिए?
क्रॉस्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.