【GAS】オーナー権限と実行者の関係
こんにちは、フリーランスエンジニアの太田雅昭です。
GASのオーナー権限
GASはオーナー権限と実行者が分かれています。これをちゃんと理解できていないと思わぬ事故に遭いそうですので、今回調べてみました。
ウェブアプリ
ウェブアプリで、以下の条件で調査しました。
- 次のユーザーとして実行:自分
- アクセスできるユーザー:全員
コードは以下です。sessionとgmailの両方を出力します。
function doGet() {
const userString = getUserString();
console.log(userString);
return ContentService.createTextOutput(userString);
}
function getUserString() {
const session = getSessionUser();
const gmail = getGmailAccount();
return JSON.stringify({ session, gmail });
}
function getSessionUser() {
return Session.getActiveUser().getEmail();
}
function getGmailAccount() {
const threads = GmailApp.getInboxThreads(1,1);
return threads[0].getMessages()[0].getTo();
}
結果は以下のようになりました。
デプロイ者 | アクセス者 | session | gmail |
オーナー | オーナー | オーナー | オーナー |
オーナー | オーナー以外 | 空文字列 | オーナー |
B | B | B | B |
B | B以外 | 空文字列 | B |
オーナーかそうでないかに関わらず、デプロイした人に関連づけられています。またセッションは、本人以外の場合は空文字列になりました。
トリガー
トリガーについては、以下のようになりました。
トリガー設定者 | session | gmail |
オーナー | オーナー | オーナー |
B | B | B |
こちらは、session含め完全にトリガー設置者に関連づけられています。
まとめ
今回、ChatGPTに振り回されました。デプロイ実行者はオーナーになると言っていましたので、おかしいなと思い、実際にテストしてみたわけです。ハルシネーションは怖いですね。