getEditors を使用してスプレッドシートの編集者のリストを取得しましたが、返されたリストには共有ドライブのユーザーが含まれています。ただし、共有ドライブへの「コンテンツ マネージャー」アクセス権を持つユーザーはリストに含まれません。これが事実である理由は何ですか?
また、getAccess を使用して、特定のユーザーがドライブ フォルダーに対して持つアクセスの種類を取得できることもわかりました。このアプローチを使用して、私の目的は、FILE_ORGANIZER または ORGANIZER 権限を持つすべてのユーザーを識別することです。アクセス許可に関する公式ドキュメントを参照してください。この情報を取得するために if ステートメントまたはループを使用することは可能ですか?
または、私が考えていなかったかもしれない共有ドライブへのアクセス権を持つすべてのユーザーのリストを取得するための回避策はありますか?
PS: 高度なドライブ サービスが有効になっていません。
// This code aims to protect a sheet in a spreadsheet
// by granting specific users access (super users)
// and revoking the access of any other user that can edit the spreadsheet.
/*
Attempted approach:
user1 and user2 have manager permission to the shared drive as a whole
user3 has content manager permission to the shared drive as a whole
user4 only has access to this spreadsheet in the shared drive
My objective is to ensure that only users 1 and 2 can edit the protected sheet.
Result:
Log shows that users 1 and 2 have access and user 4 does not.
However, user3 can still edit the sheet because they were no included in the getEditors() result hence their access could not be revoked.
*/
function protectASheet() {
var superusers = ['user1', 'user2'];
var ss = SpreadsheetApp.getActive();
var editors = ss.getEditors(); //get file editors
var sheet = SpreadsheetApp.getActive().getSheetByName('TestSheet');
//Set protection
var protection = sheet.protect().setDescription('This sheet is protected.');
protection.addEditors(superusers); //Grant superusers edit permission
protection.removeEditors(editors); //Revoke other file editors' permission
Logger.log("Only the following can edit " + sheet.getSheetName() + ": " + protection.getEditors());
}