テーブルの権限設定について

いつもお世話になっております。

このように、このテーブルを管理者のみで記入できるようにしたいです(このアプリに他のユーザーが入力する項目もあります)が、テーブルに対しての権限は基本機能ではできないので、なにか方法はありますでしょうか?アドバイスいただければ幸いです。よろしくお願い致します。

玲香さん、こんにちは。

テーブル内のフィールドに対してフィールドのアクセス権は設定できないので、ユーザーの権限チェックを含めてJavaScriptでカスタマイズするという方法もありますが、標準機能をなるべく活用したアイデアを1つご紹介します。

 

テーブルとは別にチェックボックス(選択肢1つ。フィールドコード:編集)を設定します。

テーブル内のフィールドは通常、編集不可にしておいて、このチェックボックスがチェック(値が「編集する」)されたときに編集可とする、

という処理をJavaScriptで設定します。

あとはチェックボックスフィールドに対して、フィールドのアクセス権設定で管理者だけが編集できるように設定。

 

テーブルへの新規行追加は防ぐことはできませんが、既存のデータ行の保護は実現できると思います。

 

 

チェックなし(編集不可)

 

チェック有り(管理者のみ操作可能)

使い方としては、

  1. 編集可能な管理者の人は、レコードの編集画面を開いて、
  2. 編集するチェックボックスをチェックすると、テーブル内のフィールドが編集可能状態となって値の編集をする。
  3. 終わったらチェックを外して、保存。

ちょっと工夫

  1. 「終わったらチェックを外して」を忘れることを想定して、保存実行前にチェックを外す処理も加えてみました。
  2. 編集チェックボックスは、管理者以外は見えなくすることもできます。その場合JS内での値の取得ができなくなるので、デフォルトを編集不可にしておく

 

JavaScriptカスタマイズのサンプル

/*
テーブル内フィールドのアクセス権コントロール
*/
// レコード詳細画面表示イベント、レコード追加画面表示イベント
// レコード編集画面のフィールド値変更時イベント、レコード追加画面のフィールド値変更時イベント
kintone.events.on([
'app.record.edit.show', 'app.record.create.show',
'app.record.edit.change.編集', 'app.record.create.change.編集'
], function(event) {

var record = event.record;

// フィールドのdisabled設定用変数 true/false
var isDisabled = true; // 編集チェックボックスを非表示にした場合は'true'(:編集不可)

// 編集チェックボックスの値が'編集する'の場合は isDisabled=false(編集可)とする
isDisabled = record['編集']['value'] == '編集する'? false:true;

// テーブルが複数行の場合を考慮
for (var i = 0; i < record['Table']['value'].length; i++) {
record['Table']['value'][i]['value']['データ1']['disabled'] = isDisabled;
record['Table']['value'][i]['value']['データ2']['disabled'] = isDisabled;
}

return event;
});

// チェックボックス外し忘れを防止するため、保存前イベントでチェックボックスを外す処理
kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], function(event) {
var record = event.record;
record['編集']['value'] = [];
return event;
});

 

 

Shotaro Matsuda 様

お世話になっております。

すごくわかりやすい説明とサンプルコードまで頂いて、本当にありがとうございます。

大変勉強になりました。

本当にありがとうございました。やりたいことができました。

Shotaro Matsuda 様

お世話になります。

こちらを参考に同様のカスタマイズを行いましたが、管理者ではないユーザーに、テーブルが編集出来てしまう(disabledが効かない)ユーザーと、出来ないユーザーが存在しました。
考えられる原因はあるでしょうか。

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。