Yuki's bnb blog

こんにちは!Yukiといいます。本業のかたわら大阪で2016年夏から民泊運営のお手伝いをしています。民泊業務に関する様々なことを自動化・効率化したいと思い日々活動しています。 お気軽にコメント・お問い合わせください :) TOEICスコア 985

【コピペでOK!】GASを実行可能なユーザーを制限する方法

f:id:yukibnb:20200111185721p:plain

こんにちは!
Yuki (@yukibnb) です。

スプレッドシートに独自メニューとGoogle Apps Script (GAS) の実行ボタンを追加する方法を先日紹介しました。
www.yukibnb.com

独自メニューは非常に便利ですが、スプレッドシートにアクセスできる社内スタッフ全員がGASを実行できるとまずい場合もあるかと思います。

今回は特定のGoogleユーザー (G Suiteユーザー) のみがGASを実行できるようにするコードを紹介します。

いつものようにコピペでそのまま使用できます!

 

利用シーン

f:id:yukibnb:20200111173340p:plain

スプレッドシートなどのGoogleサービスは他者と簡単に共有でき、リアルタイムで共同作業できるのが魅力です。

上記のように多くの社内スタッフと共同作業を行うととても便利です。

ですがスプレッドシートを閲覧・編集させたいがGASは実行させたくないスタッフもいると思います。

例えば画像内の鈴木さん (suzuki@company.com) がまさにそのスタッフだとします。

f:id:yukibnb:20200111173607p:plain

 

スタッフ名 閲覧・編集 GAS実行
田中さん
鈴木さん
山田さん

「鈴木さんにはスプレッドシートを閲覧・編集して業務を行ってほしい。でもGASは実行させたくない」

こんな時に使えるコードです。

 

コピペでOK!GASの実行可能ユーザーを制限するコード

コードを書く場所

紹介するコードは実行したい本来の関数より前にコピペしてください。

そうすることで、許可されていないGoogleユーザーがGASを実行しようとするとその時点でGASを終了させることができます。

f:id:yukibnb:20200111175121p:plain

 

GASの実行可能ユーザーを制限するコード

コードをそのままコピペして使用できます。

GAS実行を許可するGoogleユーザーのメールアドレスはみなさんご自身で置き換えてください。

複数のGoogleユーザーにGAS実行を許可させたい場合、カンマで区切って入力してください。

//GAS実行を許可するGoogleユーザーのメールアドレスの一覧
var acceptedUsers = ["tanaka@company.com" ,"yamada@company.com"];

//ファイルにアクセスしているGoogleユーザーのメールアドレスを取得する
var activeUser = Session.getActiveUser().getEmail();

//許可されていない場合、GASを終了する
if(acceptedUsers.indexOf(activeUser) == -1) {
  Browser.msgBox("あなたには実行権限がありません。");
  return;
  }

これだけでOKです。簡単ですね!

もし鈴木さん (suzuki@company.com) や他の許可されていないユーザーがGASを実行しようとした場合、「あなたには実行権限がありません。」というメッセージボックスが表示され、そこでGASが終了します。

f:id:yukibnb:20200111175904g:plain

 

ポイントを徹底解説!

紹介したGASのコードのポイントを細かく紹介します!

「細かいことはいいから使えたらいい!」という方や、GAS内のコメントで十分という方はこの項目は飛ばして頂いて大丈夫です。

 

許可するユーザーのメールアドレスを配列に格納する

変数acceptedUsersにGAS実行を許可するユーザーのメールアドレスを配列で格納します。

コード内では"tanaka@company.com"と"yamada@company.com"を変数acceptedUsersに格納しました。

許可するユーザーの数だけGoogleユーザーアカウントのメールアドレスを記入してください。

複数記入する場合はカンマで区切って記入してください。

 

ファイルにアクセスしているユーザーのメールアドレスを取得する

Session.getActiveUser().getEmail()でファイルにアクセスしているユーザー(ログインしているユーザー)のメールアドレスを取得します。

そしてそのメールアドレスを変数activeUserに格納します。

もし田中さんがファイルにアクセスしてGASを実行すれば変数activeUserには"tanaka@company.com"が格納されます。

同じように鈴木さんがファイルにアクセスしてGASを実行すれば変数activeUserには"suzuki@company.com"が格納されます。

 

「許可するユーザー」 = 「アクセスしているユーザー」 か判別する

f:id:yukibnb:20200111181649j:plain

indexOfメソッドを使用して「許可するユーザー」 = 「アクセスしているユーザー」 か判別しました。

indexOfメソッドとは検索したい値が配列内に存在するかどうか確認できるメソッドです。

もし検索したい値が配列内に存在しなければ「-1」を、存在すれば配列のインデックス番号「0以上」を返します。

f:id:yukibnb:20200111182547j:plain

 

対象 種別 メールアドレス
許可するユーザー
配列
"tanaka@company.com"と
"yamada@company.com"
アクセスしているユーザー
検索したい値
"suzuki@company.com"

 
今回のコードでは《許可するユーザー》配列である変数acceptedUsersに、《アクセスしているユーザー》鈴木さんのメールアドレス"suzuki@company.com"が含まれていなければ「-1」を、含まれていれば配列のインデックス番号「0以上」を返します。

鈴木さんのメールアドレス"suzuki@company.com"は変数acceptedUsersに含まれていませんので、「-1」を返します。

つまりここで大事なことは許可されていないユーザーは「-1」になるということです。

 

許可されていない場合、GASを終了する

許可されていないユーザーは「-1」になることがわかりました。

ということは「-1」の時にGASを終了させることができればOKですね。

以下箇所では「-1」になったらBrowser.msgBox()でメッセージを表示し、returnで関数を終了します。

returnを使うことでその場で関数を終わらせることができたので、以降に記述されているGASのコードは実行されません。

 

//許可されていない場合、GASを終了する
if(acceptedUsers.indexOf(activeUser) == -1) {
  Browser.msgBox("あなたには実行権限がありません。");
  return;
  }

 

まとめ

今回は特定のGoogleユーザー (G Suiteユーザー) のみがGASを実行できるようにするコードを紹介しました。

多くの社内スタッフにスプレッドシートを共有したとしても、特定のスタッフだけGASを実行することが可能なので便利です。

みなさんの業務の参考になれば幸いです!