スクリーンショット_2019-09-19_20

【kintone】アプリのテンプレート化での落とし穴 〜アクセス権限設定はボタン一発クリックでサクッと!〜

kintoneアプリのアクセス権設定って、画面でポチポチってできて簡単!


ただ・・・

せっかくアプリをテンプレート化しても、アクセス権関連は最初から設定しなきゃならないんですよね。。。(辛い)
アプリが増えたり、スペース(ゲストスペース)ごとに同じような設定を繰り返し設定するのは、かなりめんどくさい!
そして、設定ミスが多発!

そんな時にはkintoen REST APIを利用して、ボタンクリックによる一括設定でサクッと終わらせましょう。

本記事はこんな方にお勧め!

・アプリのテンプレートを利用
・アプリが複数
・スペース(ゲストスペース)にアプリセットを複製
・全部画面でやるのはポチポチがめんどくさい
・プログラム経験あり

スクリーンショット 2019-09-19 19.38.37

開発環境

・kintone REST API (こちら)
・javascript (アプリにアップロードします)

最終的にできる事

ゲストスペース内アプリを含む、合計3つのアプリに対して、ボタンクリック一発でアクセス権設定の一括設定が行えます。

準備

・一括設定用アプリの作成
 ・スペースフィールド(要素ID:setAUth)
・アプリ1の作成(権限設定対象)
・アプリ2の作成(権限設定対象)
・アプリ3の作成(権限設定対象)(ゲストスペース)
・ユーザアカウント(user1)の作成
※アプリ1,2,3のフィールドは特に設定なし

実装完成形(javascript)

(function() {
 "use strict";

 kintone.events.on('app.record.detail.show', function(event) {
   var addButton = document.createElement('button');
   addButton.id = 'setAuth';
   addButton.innerText = 'アクセス権限設定';
   addButton.onclick = setAuth.bind();
   kintone.app.record.getSpaceElement('setAuth').appendChild(addButton);
   return event;
 });

 function setAuth() {
   // Administratorsグループの基本設定
   var adminAuth = {
     "entity": {
       "type": "GROUP",
       "code": "Administrators"
     },
     "appEditable": true,
     "recordViewable": true,
     "recordAddable": true,
     "recordEditable": true,
     "recordDeletable": true,
     "recordImportable": true,
     "recordExportable": true
   };
   // ユーザ:user1の基本設定
   var userAuth = {
     "entity": {
       "type": "USER",
       "code": "user1"
     },
     "appEditable": true,
     "recordViewable": true,
     "recordAddable": true,
     "recordEditable": true,
     "recordDeletable": true,
     "recordImportable": true,
     "recordExportable": true
   };
   // Everyoneの基本設定
   var everyone = {
     "entity": {
       "type": "GROUP",
       "code": "everyone"
     },
     "appEditable": true,
     "recordViewable": true,
     "recordAddable": true,
     "recordEditable": true,
     "recordDeletable": true,
     "recordImportable": true,
     "recordExportable": true
   };
   
   body = {"app": 1,"rights": [adminAuth,userAuth,everyone]};
   kintone.api(kintone.api.url('/k/v1/app/acl', true), 'PUT', body, function(resp) {
     console.log("APP:1");
     body = {"app": 2,"rights": [adminAuth,userAuth]};
     kintone.api(kintone.api.url('/k/v1/app/acl', true), 'PUT', body, function(resp) {
       console.log("APP:2");
       body = {"app": 3,"rights": [adminAuth,everyone]};
       kintone.api(kintone.api.url('/k/guest/100/v1/app/acl', true), 'PUT', body, function(resp) {
         console.log("APP:3, GuestSpace:100");
       }, function(error) {
         // error
         console.log(error);
       });          
     }, function(error) {
       // error
       console.log(error);
     });        
   }, function(error) {
     // error
     console.log(error);
   });
 }

})();

少しずつ解説していきます。

ボタン配置

レコード詳細画面を開いた際のイベントで、ボタンを設置します。
設置する場所は準備した一括設定用アプリのスペースうフィールド(setAuth)となります。

 kintone.events.on('app.record.detail.show', function(event) {
   var addButton = document.createElement('button');
   addButton.id = 'setAuth';
   addButton.innerText = 'アクセス権限設定';
   addButton.onclick = setAuth.bind();
   kintone.app.record.getSpaceElement('setAuth').appendChild(addButton);
   return event;
 });

権限設定

Administratorsグループ、ユーザ:user1、Everyoneグループに対して各種設定を行います。

・appEditable:アプリの管理
・recordViewable:レコードの閲覧
・recordAddable:レコードの追加
・recordEditable:レコードの編集
・recordDeletable:レコードの削除
・recordImportable:ファイルの読み込み
・recordExportable:ファイルの書き出し
値をtrueにすると、kintone画面でチェックを入れた状態(許可)
   // Administratorsグループの基本設定
   var adminAuth = {
     "entity": {
       "type": "GROUP",
       "code": "Administrators"
     },
     "appEditable": true,
     "recordViewable": true,
     "recordAddable": true,
     "recordEditable": true,
     "recordDeletable": true,
     "recordImportable": true,
     "recordExportable": true
   };
   // ユーザ:user1の基本設定
   var userAuth = {
     "entity": {
       "type": "USER",
       "code": "user1"
     },
     "appEditable": true,
     "recordViewable": true,
     "recordAddable": true,
     "recordEditable": true,
     "recordDeletable": true,
     "recordImportable": true,
     "recordExportable": true
   };
   // Everyoneの基本設定
   var everyone = {
     "entity": {
       "type": "GROUP",
       "code": "everyone"
     },
     "appEditable": true,
     "recordViewable": true,
     "recordAddable": true,
     "recordEditable": true,
     "recordDeletable": true,
     "recordImportable": true,
     "recordExportable": true
   };

アプリへのアクセス権限設定

アプリ1に対してAdministrators,user1,Everyoneへのアクセス権限を設定

body = {"app": 1,"rights": [adminAuth,userAuth,everyone]};
kintone.api(kintone.api.url('/k/v1/app/acl', true), 'PUT', body, function(resp) {
  // success
  console.log(resp);
}, function(error) {
  // error
   console.log(error);
});

アプリ2に対してAdministrators,user1へのアクセス権限を設定

body = {"app": 2,"rights": [adminAuth,userAuth]};
kintone.api(kintone.api.url('/k/v1/app/acl', true), 'PUT', body, function(resp) {
  // success
  console.log(resp);
}, function(error) {
  // error
   console.log(error);
});

アプリ3(ゲストID:100)に対してAdministrators,Evetyoneへのアクセス権限を設定(urlのguest/100が大事)​

body = {"app": 2,"rights": [adminAuth,everyone]};
kintone.api(kintone.api.url('/k/guest/100/v1/app/acl', true), 'PUT', body, function(resp) {
  // success
  console.log(resp);
}, function(error) {
  // error
   console.log(error);
});

一括設定操作

一括設定用アプリで生成された「アクセス権限設定」ボタンを一発ポチっと

もうちょっと工夫すると・・・

各アプリに対する設定で、それぞれadminAuth,userAuth,everyoneの中身を変更しながら設定する事も可能です。

これで、アプリIDや各権限の設定を変更しながら実行すれば、
kintoneの設定画面で地道にポチポチしなくても、一括設定が行えます!

楽チン

スクリーンショット 2019-09-19 19.38.37




この記事が気に入ったらサポートをしてみませんか?