Tüm alt klasörlerde Google Drive dokümanlarının izinlerini nasıl sıfırlarım?


14

Tamam, bunun cevabını her yerde aradım ve bulamıyorum.

Doğru sürücülerin çok fazla açık paylaşım olmadan doğru şeylere erişebilmesi için Google Drive'ımızı organize etmeye çalışıyoruz. "Yönetici", "Finans", "İK", "Mühendislik" vb. İçin alt klasörlere sahip "Şirket" adında bir üst düzey klasörünüz var. Alt klasörlerin üst düzey olanlardan daha kısıtlayıcı izinleri vardır.

Artık doğru yerde az çok her şeyimiz var ve çoğunlukla bu işe yarıyor. Sorun, tek tek dosyaların veya klasörlerin kendi izinlerine sahip olmasıdır - daha sonra izinleri klasörlerinden devralmış gibi görünmezler. Her şeyin izinlerini nasıl sıfırlarızHiyerarşinin her bir bölümündeki her üst klasörle aynı olacak şekilde ?

Windows Server veya Mac OS X'te bir öğe için "devralınmış" ve "açık" izinler arasında açık bir ayrım vardır ve bir hiyerarşideki tüm öğeler için "açık" izinleri kaldırmak kolaydır. GD için bu nerede?

Yanıtlar:


3

Vidar'ın komut dosyasını yükledim ve dosyalar için çok iyi çalışıyor, ancak klasörlerdeki izinleri sıfırlamaz. Bu yüzden, klasörleri izinleri üst klasörlerinden devralmak için kodu biraz değiştirdim.

İki önemli feragatname:

  1. Orijinal niyetin klasörleri değiştirmeden bırakmak mı bilmiyorum. Ya da benden başka herkes için iyi çalışıyor olsa bile ve bu çözümler gereksizdi. Benim için çalıştı.
  2. Bu yaptığım ilk komut dosyasıdır, bu yüzden çok verimli olmadığı ve bazı hatalar içerebileceği muhtemeldir. Düzeltmek ve geliştirmek için çekinmeyin.

Sadece doResetPermissionsişlevi değiştirdim , ancak basitlik nedeniyle tüm kodu yapıştırıyorum.

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 tarafından izlenmeyen dosyaları (yüklenen PDF'ler ve DOCX dosyaları gibi) silmesi dışında bu hoş bir şeydir.
user683

Peki bu benim için çalışmayacak o zaman @ user683. Komut dosyasında nerede dosyaları "siler"? Bu çok tehlikeli! Bu komut dosyasının dosyaları ayarlaması değil, izinleri ayarlaması gerekiyor!
Arvo Bowen

3

Klasör izinlerini sıfırlamam gerekirse, klasörü yeniden adlandırırım ( Finans → Finans_1 ), eski adla yeni bir klasör oluştur ( Finans ) ve tüm alt klasörleri yeni klasöre "taşır".

Bu taşıma ile, alt klasörler için tüm izinleri sıfırlarsınız.


2

İstediğiniz şeye yakın olması gereken bir Google Apps Komut Dosyaları web uygulaması oluşturdum.

ÖNEMLİ! Bunu klasörlerinizin herhangi birinde çalıştırmadan önce, başka bir hesapta test ettiğinizden emin olun. Komut dosyası istendiği gibi çalışıyor gibi görünse de, izinlerinizi bozmayacağına dair hiçbir garanti veremem. Bu yüzden komut dosyasını dikkatli bir şekilde gözden geçirin , Google Apps Komut Dosyaları belgelerine bakın ve herhangi bir üretim verisi üzerinde çalışmadan önce iyice test edin.

Komut dosyasının kullanıcı arayüzü çok basit, bu yüzden fantezi bir şey hariç.

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

Bu komut dosyasını yüklemek için Google Drive'ınıza gidin ve Yeni → Google Apps Komut Dosyası'nı tıklayın . Kodu yapıştırın ve Yayınla → Web uygulaması olarak dağıt .
Komut dosyasını oturum açan kullanıcı olarak Çalıştır olarak ayarlayın (veya benzeri, Google Drive'ım İngilizce değil) .

Uygulamayı çağırırken Google Drive'ınızın klasör hiyerarşisi gösterilir. Bir klasöre tıklandığında , klasör ve alt klasörleri ( koddaki işlev ) için izin sıfırlama komut dosyası yürütmeyi seçebileceğiniz çirkin görünümlü bir açılır pencere görüntülenir doResetPermissions.
Bu işlev klasör ve alt klasörleri üzerinden yinelenir. Bulduğu her dosya için file.setSharing, üst klasördeki değerlerle yürütülür . Ayrıca file.removeViewerkayıtlı tüm izleyicileri ve file.removeEditortüm kayıtlı düzenleyicileri çağırır .

RemoveViewer ve removeEditor belgelerini kontrol ederek istediğinizi yapın.

Komut dosyasının yürütülmesinin biraz zaman alabileceğini (klasör yapınızın boyutuna bağlı olarak) ve komut dosyası çalıştırma günlükleri ( Görünüm → Günlükler ) dışında çalışırken geri bildirim verilmediğini unutmayın .


CreateBrance createBrance içinde kullanılır? İşe yarıyor mu?
Jacob Jan Tuinstra

1
Evet, iyi çalışmalı. Özyinelemeli bir işlevdir.
Vidar S. Ramdal

0

rclone copySeçtiğiniz varsayılan paylaşım ayarlarına izinleri değiştirirken en iyi yolun, tüm dosyaları ile üst klasörü yeniden oluşturmak için kullanmak olduğunu öğrendim .

Eğer varsa, bir grup dizin ile bir takım sürücü varsa, her şeyi bad_permissions gibi yeni bir klasöre taşıyın. Sonra bu sürücü için rclone'de yeni bir uzaktan kumanda oluşturun ve kullanın rclone copy gdrive:bad_permissions gdrive:fixed_permissions. Kopya sunucu tarafında olduğundan, indirmek / yüklemek zorunda kalmazsınız.

UYARI : Daha sonra kopyalanan klasörü bir dosya karşılaştırma aracıyla kontrol ettim ve her şeyin düzgün bir şekilde aktarıldığından ve rclone'un herhangi bir hata göstermeden oldukça büyük miktarda dosyayı kaçırdığından emin olmak için.


-1

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

Bu bağlantıya göre, dosyaların varsayılan izinlere ayarlandığından emin olmanız gerekir, daha sonra klasörden miras almaları gerekir.

edit: ctrl + a klasördeki tüm dosyaları seçer, ardından kiminle paylaşıldığını aynı anda değiştirebilirsiniz.


1
Bence OP aynı anda tüm belgeler için izinleri varsayılana nasıl sıfırlayabileceğinizi bilmek istiyor .
Vidar S. Ramdal

1
Birçok klasörümüz var. Bunları TÜM dosyalar için özyinelemeli olarak nasıl yapabilirim?
Kromster
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.