ログインユーザーのグループで編集保存時にエラーを発生させたい

お世話になります。

ログイン者が管理者(Administrator)かどうかで保存権限を与えたいと考えています。

下記のようにしてみたのですが、うまくいきませんでした。

アドバイスをいただけましたら幸いです。

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

 

 

kintone.events.on(['app.record.edit.show', "app.record.edit.submit",'app.record.create.show', "app.record.create.submit"], function(event){

var user_group,
group_ary_count,
user_group_ary = [],
user = kintone.getLoginUser();
var record = event.record;
var today = new Date();
var 日付 =record.日付.value;

/*--ユーザーの所属グループのコードを表示する ※複数件ある場合--*/ 
kintone.api('/v1/user/groups','GET',{
code:user.code
},function(resp){
//所属グループの数を数える
group_ary_count = resp.groups.length;
//所属グループの中に特定のグループがあるかの場合分け
for(var i = 0; i < group_ary_count; i++){
user_group = resp.groups[i].code;
user_group_ary.push(user_group);
}

});

if ( 日付!==today&&user_group_ary.indexOf('Administrator') === -1 ){
event.error = 'エラーです!';
}
return event;
});
})();

青山昌司さん

こんにちは。ひよこです。

アプリのアクセス権限で、レコード編集を Administrator のみ付与すれば良さそうとおもったのですが、それだとなにかできないことがありますか?
大前提ではアクセス権を設定しておいて、あとは日付の判定部分のみカスタマイズで実装したら良いのかな?と思いました。

 

ちなみに、コードですが、ぱっと見た感じ、以下を直す必要がありそうです。
太字は、日付の判定部分のみカスタマイズで実装する場合にも関係しそうな箇所です。

  • 保存ボタンを押したときの処理なので、イベントは “app.record.edit.submit”,“app.record.create.submit” だけでよさそう
  • var 日付 =record.日付.value; は、変数名に日本語は使わない
  • group_ary_count = resp.groups.length; は var group_ary_count = resp.groups.length; にする
  • User API の実行をする時に Promise を使う必要がある。
    Promise を使わないと、event.error に値が入らない状態で return event しそうなのでエラーにならない。
    Promise の記事:https://developer.cybozu.io/hc/ja/articles/360023047852
  • record.日付.value で取得できる値は文字列型ですが、new Date はDate 型で型が違うので比較できない
    日付処理は、Moment.js を使うとよさそうです。https://developer.cybozu.io/hc/ja/articles/204982474

 

こんにちは。

別の案のご提案ですが、

・Administratorしか見えないダミーフィールドを追加する(フィールドのアクセス権でAdministratorだけ閲覧可能にする)

・eventオブジェクトの中を確認して、そのフィールドが存在していたらAdministratorと判断する(Administrator以外の場合は存在しないので)

としてあげればUserAPIを使わなくてもいけそうです。

ひよこさん

お世話になります。

ご連絡ありがとうございます。

行いたいことが言葉足らずでした。

「日付」フィールドに入っている日が当日だったら誰でも保存可能。

「日付」フィールドが過去になった場合管理者のみ編集可能(グループロールが「Administrator」)としたいと考えています。

レコードのアクセス権では「日付」が指定日しか選択できない為方法を考えていました。

ご指摘の箇所を修正していますが、ご教授いただいている「Promise」の箇所が理解できず申し訳ございません。

現状日付フィールドが過去のものは管理者、非管理者もエラー表示が出てしまっています。

よろしければご教授いただけませんでしょうか。

編集を行ったのは下記のとおりです。

 

 

(function () {
'use strict';
//レコード詳細表示のイベントハンドラー
kintone.events.on(["app.record.edit.submit"], function(event){
var record = event.record;
var now = new Date();
var today =moment(now).format('YYYY-MM-DD');
var date =record.日付.value;
var user_group,
group_ary_count,
user_group_ary = [],
user = kintone.getLoginUser();
console.log(record.日付.value);
console.log(today);

kintone.api('/v1/user/groups','GET',{
code:user.code
},function(resp){
//所属グループの数を数える
var group_ary_count = resp.groups.length;
//所属グループの中に特定のグループがあるかの場合分け
for(var i = 0; i < group_ary_count; i++){
user_group = resp.groups[i].code;
user_group_ary.push(user_group);
}
alert(user_group_ary.join(''));
});

if(date!==today&&user_group_ary.indexOf('Administrator') === -1 ){
event.error = 'えらー!';
}
return event;
});
})();

あさがさん

こんにちは。

ご連絡ありがとうございます。

ダミーフィールドを作成しAdministratorのみに閲覧権限を入れてみたのですが

Administratorはエラー無く保存しましたが

Administrator以外では保存を行った場合にダミーが未定義のようなエラーが出てしまい

保存ができてしまいました。

ご確認の程よろしくお願いいたします。

 

var record = event.record;

        var now = new Date();
        var today =moment(now).format('YYYY-MM-DD');
        var date =record.日付.value;
        var dummy =record.ダミー.value;

        console.log(record.日付.value)
        console.log(today)    

        if(date!==today&&dummy===""){
        }
    if(date!==today){
             event.error = 'エラーです!';

        }

青山さん

var dummy =record.ダミー.value;

ここでエラーになってしまうと思いますので、以下のような書き方で判定できるかと思います。

if(!record.ダミー){
    alert('ダミーが見えない');
}else{
    alert('ダミーが見える');
}

あさがさん

お世話になります。

無事動作することができました。

新しい発見でした。

ありがとうございました。

今後ともよろしくお願いいたします。

 

if(date!==today&&!record.ダミー ){ //
event.error = "えらー";

}else{

}