Я использую 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 файлов и папок)