フィールドアクセス権の取得方法

アプリ内のあるフィールドのアクセス権によって挙動を変えるカスタマイズを行っております。

ユーザー単位でアクセス権が設定してある現状では

ログインユーザ情報取得

こんな感じでアクセス権を取得
kintone.api(kintone.api.url(‘/k/v1/field/acl.json’, true), ‘GET’, { app: APP_ID })

という風にできていたのですが、ユーザーが増えたのでグループ(ロール)で
フィールドのアクセス権を設定しようとして、ちょっと立ち止まっております。

現状では

・ログインユーザー情報取得
・グループ(ロール)取得
kintone.api(kintone.api.url(‘/v1/user/groups’, true), ‘GET’, userCode)
・フィールドアクセス権取得
kintone.api(kintone.api.url(‘/k/v1/field/acl.json’, true), ‘GET’, { app: APP_ID })

を準備して、アクセス権(rights)を順番にチェック

rights.entities.typeが"USER"ならユーザーcodeと合致するかチェック
rights.entities.typeが"GROUP"ならロールをチェックして自分が所属しているかチェック

みたいなまどろっこしい方法しか思いつかないのですが、他にベストや方法はあるでしょうか?

 

~余談~
ちなみに非推奨というか非公認(?)な cybozu.data.page.FIELD_ACCESSIBILITY
による方法も検討していたのですが、どういうわけだかアクセス権が無いのに
'WRITE’が出るケースがあるので使用を躊躇っております。
(これが一番手っ取り早い方法かなと思っていたのですが、環境によってなのか何なのか、
普通に’NONE’が出る場合もあれば、一覧画面上で「(閲覧権限なし)」と表示されるのに
'WRITE’が出てくる場合もあり、この違いの原因がわからず。。)

bzさん

こんにちは

 

ログインユーザーが指定のフィールドへのアクセス権が「あり(閲覧可or編集可)」「なし(閲覧不可)」という

どちらかの判定でしたら、以下のコードでいかがでしょうか。

try~catchで判定し、アクセス権が無ければcatchに入ります。

function CheckAuthority(event) {
let record = event.record;
let ret = true;
try {
let temp = record.フィールドコード.value;
} catch (e) {
// 権限なし
ret = false;
}
// 権限あり:true、なし:false
return ret;
}

ありがとうございます。

そうですね、閲覧不可の有無であればtry~catchで簡単に判別はできそうです。

が、「あり(閲覧可or編集可)」←問題はここですね。。。
そのユーザーがフィールドを更新できるのかできないのか、をこんな感じでシンプルに判別する方法はあるのでしょうか…?

bzさん

 

編集権限の有無は判定できなさそうです。

record.フィールドコード.value = ‘hoge’;

に書き直してcatchに入らないかなと思いましたが思惑はずれました。

 

記載のフィールドアクセス権限「/k/v1/field/acl.json」も

必要なアクセス権が「アプリ管理権限」とあるので、一般ユーザーは取得できないかもしれません。

記載のフィールドアクセス権限「/k/v1/field/acl.json」も

必要なアクセス権が「アプリ管理権限」とあるので、一般ユーザーは取得できないかもしれません。

なんと!これは見落としておりました。。
全員にアプリ管理権限をつけるわけにもいきませんものね。。。

では現状、kintoneではフィールドのアクセス権の設定による動的処理は不可能
(ただしcybozu.data.page.FIELD_ACCESSIBILITYは場合によっては使えるかも)
ということでしょうかね。うーん、痒いですね。。。