2

ColdFusion と MySQL と共にFullCalendar jQuery プラグインを使用しています。「管理者」と「読み取り専用」の 2 つのユーザー レベルがあります。「管理者」ロールには完全な編集機能があり、「読み取り専用」ユーザーにはカレンダーのイベントを表示することしかできず、変更を加えないようにしたいと考えています。ユーザーの役割が管理者で、ユーザーの役割が読み取り専用の場合に設定される関数を FullCalendareditableオプションに追加することで、これを行うことを望んでいました。truefalse

この変数userRoleは、ColdFusion セッション変数に基づいてページ ヘッダーに設定されます。userRoleJavaScriptで呼び出されたときに正しい文字列が含まれていることを確認しました。

私が試したこと:

$("#calendar").fullCalendar({
    // other options and callbacks
    // ....

    editable: function(){
        if (userRole == 'Read-Only') {
            return false //events can not be modified
        }
        else if (userRole == 'Admin') {         
            return true  //events can be modified
        }
    },
    // other callbacks
    // ...
});

Firebug を使用してコードをステップ実行すると、editableオプションの関数全体がスキップされ、イベントは両方のユーザー タイプで編集可能になります。

jQuery 関数に欠陥はありますか (jQuery でのプログラミングは初めてです)。FullCalendareditableオプションは機能を許可しませんか?

FullCalendar コールバック (例: eventDrop、eventResize、select、および eventClick) ごとにユーザー ロール チェックを実行することで、これを回避できます。

select: function(start, end, allDay) {
        // check if user is Admin, if not, unselect and return
        if (userRole != 'Admin') {
            alert("You do not have the permissions to edit events.");
            $("#calendar").fullCalendar( 'unselect' );
            return
        }

        // proceed if user is Admin
        // ...
}

ユーザーの役割が「管理者」の場合にのみ続行しますが、役割をよりグローバルに設定できることを望んでいました。

アイデア?

4

1 に答える 1

1

There's a couple ways you can solve this problem depending on your implementation of the calendar.

すでに ColdFusion を使用して JavaScript 変数を設定しているため、単純に次のことを実行できませんか。

editable: <cfif session.userType eq 'Admin'>true<cfelse>false</cfif>

別の方法として、Event オブジェクトを使用して制御します。通常、Calendar をデフォルトで「editable: false」に設定しますが、イベント オブジェクトをオブジェクトごとに選択的に編集可能にします。JSON を返す Web サービス cfc を介して ColdFusion からイベントを生成し、誰が何を編集するかを ColdFusion に決定させ、表示には FullCalendar を使用します。

于 2012-12-05T01:06:37.960 に答える