kintoneのアクセス権について

kintoneで以下のことを実現させたいと思っています。

 

前提:フォーム上のドロップダウン項目「A,B,C,D」が存在する

—----------------------------------------------------------

・ドロップダウン「A」を入力すると

①作成者はフォーム修正不可

②それ以外のeveryoneは全フィールドを編集できる

—----------------------------------------------------------

・ドロップダウン「B,C,D」いづれかを入力すると

①作成者はフォーム上の一部の指定したフィールドのみを編集できる(≠ドロップダウン)

②それ以外のeveryoneは全フィールドを編集できる

—----------------------------------------------------------

 

よろしくお願いいたします。

 

以下で近いことが可能かと思います。あくまでアクセス権を禁止するのではなく編集不可にするだけなので完全ではないことと、サブテーブル内の特定のフィールドは対応させていません。必要に応じて変更して下さい。

(() => {
    'use strict';

    let dropdown = 'ドロップダウン'; // ドロップダウンのフィールドコード
    let banFields = []; // ドロップダウンがBCDの時に編集を禁止するフィールド

    const fieldDisabled = (record, fields, isDisabled) => {
        fields.forEach((field) => {
            if (record[field].type === 'SUBTABLE') {
                record[field].value.forEach((row) => {
                    Object.keys(row.value).forEach((column) => {
                        row.value[column].disabled = isDisabled;
                    });
                });

                kintone.events.on([
                    `app.record.create.change.${field}`, `app.record.edit.change.${field}`
                ], (event) => {
                    event.record[field].value.forEach((row) => {
                        Object.keys(row.value).forEach((column) => {
                            row.value[column].disabled = isDisabled;
                        });
                    });

                    return event;
                });
            } else {
                record[field].disabled = isDisabled;
            }
        });
    };


    kintone.events.on([
        'app.record.create.show', 'app.record.edit.show',
        `app.record.create.change.${dropdown}`, `app.record.edit.change.${dropdown}`
    ], (event) => {
        let record = event.record;

        if (record[dropdown].value === 'A') {
            if (event.type.match(/create/) || record['作成者']?.value.code === kintone.getLoginUser().code) {
                fieldDisabled(record, Object.keys(record), true);
            } else {
                fieldDisabled(record, Object.keys(record), false);
            }
        } else if (record[dropdown].value?.match(/B|C|D/)) {
            if (event.type.match(/create/) || record['作成者']?.value.code === kintone.getLoginUser().code) {
                fieldDisabled(record, banFields, true)
            } else {
                fieldDisabled(record, banFields, false);
            }
        }

        return event;
    });
})();

mls-hashimotoさん

ありがとうございます。

こちらで試させていただきます。

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