Сбой удаления файлов через Drive API с ошибкой: Недостаточно разрешений для этого файла

#google-apps-script #google-drive-api

#google-apps-script #google-drive-api

Вопрос:

Вступление: Алиса подготовила скрипт приложения, который привязан к Google Sheet. Скрипт генерирует документ Google из Google Sheet. Документ хранится на Google Диске Алисы. Если Alice сгенерирует новый документ Google, то старый будет удален. Для этого используется следующий код.

 function delteFile(myFileName) {
  var allFiles, idToDLET, myFolder, rtrnFromDLET, thisFile;

  myFolder = DriveApp.getFolderById("folder_id_is_here");

  allFiles = myFolder.getFilesByName(myFileName);

  while (allFiles.hasNext()) {
    thisFile = allFiles.next();
    idToDLET = thisFile.getId();
    rtrnFromDLET = Drive.Files.remove(idToDLET); // API call to drive.files.delete failed with error: Insufficient permissions for this file
  };
};
  

Алиса поделилась проектом на облачной платформе Google с Бобом.

  1. Если Алиса сгенерирует документ Google, то Боб не сможет успешно выполнить приведенный выше код. Код показывает

    Вызов API для drive.files.сбой удаления с ошибкой: недостаточно разрешений для этого файла

В этом случае Алиса может успешно выполнить приведенный выше код.

  1. Если Боб сгенерирует документ Google, то Алиса не сможет успешно выполнить приведенный выше код. Код показывает ту же ошибку. В этом случае Боб может успешно выполнить приведенный выше код.

Вопрос:Проект доступен на облачной платформе Google. Чем еще Алисе нужно поделиться?

Комментарии:

1. После создания файла предоставляется ли к нему общий доступ как Алисе, так и Бобу? (сделав их редакторами)?

2. Не удается удалить то, что вам не принадлежит. Используйте учетную запись службы или Team Drive вместо Google Drive

Ответ №1:

Подходящим средством для решения этой проблемы является Google Shared Drive. Но если в вашей ситуации это не сработает, вы можете создать свою собственную папку для мусора (например, ‘ToTrash’). Затем предоставьте людям, которые могут удалять, разрешение на эту папку. Вместо удаления вы разрешаете пользователям использовать скрипт (см. Ниже), который перемещает файлы в вашу собственную папку «ToTrash». Время от времени вы удаляете все файлы в папке ‘ToTrash’. Для этого вы также можете написать скрипт (не предоставляется, но его легко написать), который автоматически запускается, например, один раз в день.

 // TRASHFOLDERID is the Id of your own created trash folder.
// 'file' is a file object you constructed
// by getting it by id, name, or FileIterator

const trashFolder = DriveApp.getFolderById(TRASHFOLDERID);
file.moveTo(trashFolder);