Ошибка: нет такого пользователя при попытке удалить разрешение для файла или папки - PullRequest
0 голосов
/ 23 апреля 2019

Я использую google-app-scripts для отзыва прав доступа к файлам и папкам на диске Google, перебираю файлы и папки на своем диске Google и, когда обнаруживаю, что у пользователя есть доступ к файлу, я пытаюсь отозвать его, но затем возникает исключение: «Нет такого пользователя», я не могу найти причину, почему это произошло.

function run() {
    var emailsToRevoke = ["EmailA", "EmailB"];
    revoke(emailsToRevoke);
}

function revoke(emails){
  var files = DriveApp.getFiles();
  var folders = DriveApp.getFolders();

  emails.forEach(function(email){
    try {
      while(files.hasNext()) {
        var file = files.next();

        if(file.getAccess(email) !== DriveApp.Permission.NONE) {
          file.revokePermissions(email)
        }

        var editors = file.getEditors();
        var viewers = file.getViewers();

        console.log("Checking Permission for: " + file)

        for (var i = 0; i < editors.length; i++) {
          if(editors[i].getEmail() === email) {
            console.log("Revoking Permission to " + file.getName() + " for: " + email )
            file.removeEditor(email)
          };
        }

        for (var i = 0; i < viewers.length; i++) {
          if(viewers[i].getEmail() === email) {
            console.log("Revoking Permission to " + file.getName() + " for: " + email )
            file.removeViewer(email)
          };
        }

        doubleCheckUser(file, email)
      }

      while(folders.hasNext()) {
        var folder = folders.next();


        if(folder.getAccess(email) !== DriveApp.Permission.NONE) {
          folder.revokePermissions(email)
        }

        var editors = folder.getEditors();
        var viewers = folder.getViewers();

        console.log("Checking Permission for: " + folder)

        for (var i = 0; i < editors.length; i++) {
          if(editors[i].getEmail() === email) {
            console.log("Revoking Permission to " + folder.getName() + " for: " + email )
            folder.removeEditor(email)
          };
        }

        for (var i = 0; i < viewers.length; i++) {
          if(viewers[i].getEmail() === email) {
            console.log("Revoking Permission to " + folder.getName() + " for: " + email )
            folder.removeViewer(email)
          };
        }

        doubleCheckUser(folder, email);
      }
    } catch(error) {
      console.error("Error During Revoking Access Process: " + error)
    }   
  });
}

function doubleCheckUser(objectToCheck, email) {
  try {
    var access = objectToCheck.getAccess(email)
    if(access !== DriveApp.Permission.NONE) {
      console.warn("Access to: " + objectToCheck.getName() + " has not been revoked properly. Current Access: " + access)
    }
  } catch(error) {
    console.error("Error Double Checking If User: " + email + " Was Removed Properly From: " + objectToCheck.getName())
  }
}

Я уверен, что электронная почта имеет доступ к файлам, поскольку я регистрирую ее в doubleCheckUser (), я также уверен, что электронная почта действительна.

Он вызывается просто путем добавления электронных писем в массив emailsToRevoke, а затем выбора функции запуска в пользовательском интерфейсе сценариев Google и нажатия кнопки запуска.

Мой вопрос: что я делаю неправильно и как я могу решить эту проблему? В конце дня все, что мне нужно, это отменить доступ, поэтому не стесняйтесь, если вы знаете лучший способ сделать это.

Редактировать ---
Обратите внимание, что на диске много файлов (определенно, более 1000 файлов и папок)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...