はじめに
AppsheetのEnterpriseプランであればGoogleグループごとにアプリの共有を行うことができるようなのですが、アプリの中でGoogleグループの権限を参照し表示制限をしたかったので、GoogleグループのデータをGASで取得しアプリケーションの判定として組み込みました。
グループ情報の取得
まずGASでアプリ内の管理者データを表示させたいグループのデータを取得します。
//スプレッドシートにメニューを追加
function onOpen() {
var ui = SpreadsheetApp.getUi();
var menu = ui.createMenu("実行");
menu.addItem("グループ・権限取得", "getGroupMembersToSheet");
menu.addToUi();
}
function getGroupMembersToSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var groupEmail = 'データ取得したいグループのメールアドレス';
//グループ情報取得
var group = GroupsApp.getGroupByEmail(groupEmail);
//スプレッドシート書き込み
if (group) {
var members = group.getUsers();
if (members.length > 0) {
//一行目にカラムを追加
sheet.getRange(1, 1).setValue("メールアドレス");
for (var i = 0; i < members.length; i++) {
sheet.getRange(i + 2, 1).setValue(members[i].getEmail());
}
} else {
sheet.getRange(1, 1).setValue('このグループにはメンバーがいません。');
}
} else {
sheet.getRange(1, 1).setValue('指定したメールアドレスのグループが見つかりません。');
}
}
onOpen()を実行後
スプレッドシート実行タブに「グループ・権限取得」が生成されるので実行します。
GASのトリガーを使用し定期実行させることも可能です。
今回はgetGroupMembersToSheet関数を毎日午前0時から1時で実行させるよう設定しております。
グループデータ取り込み
作成したスプレッドシートのデータをAppsheetで取り込みます。
更新や削除を行うことはないのでRead-Onlyを選択します。
判定作成
観覧を制限したいViewsの中の「ShowIf」でアプリ使用者のメールアドレスがグループに無い場合表示させないように記載します。
今回は「在庫一覧(管理者)」Viewを表示させないようにします。
作成した管理者グループデータの中にアプリユーザーが含まれている場合表示させるようにIN関数を使用し設定します。
IN(USEREMAIL(),SELECT(管理者グループデータ[メールアドレス],true))
動作確認
データソースに無いメールアドレスを指定すると
「在庫一覧(管理者)」Viewが表示されていないことが確認できました。
まとめ
アプリの表示権限をテーブルとして持つと管理に別途運用コストが発生してしまうのでGoogleグループのデータでアプリ内の挙動を変更したい場合の参考になれば幸いです。