2

我正在使用FullCalendar jQuery 插件以及 ColdFusion 和 MySQL。我有两个用户级别,“管理员”和“只读”。我希望“只读”用户只能查看日历上的事件而不进行任何更改,而“管理员”角色具有完整的编辑功能。editable我希望通过向 FullCalendar选项添加一个函数来做到这一点,true如果用户的角色是管理员并且false用户角色是只读的,则该选项将设置为。

该变量userRole基于 ColdFusion 会话变量在页眉中设置。我验证了userRole在 javascript 中调用时确实包含正确的字符串。

我尝试了什么:

$("#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
    // ...
});

editable当我使用 Firebug 单步执行代码时,会跳过该选项的整个功能,并且两种用户类型的事件都是可编辑的。

我的 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

根据您对日历的实施,有几种方法可以解决此问题。

由于您已经在使用 ColdFusion 设置 JavaScript 变量,所以您不能简单地执行以下操作:

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

或者,我控制它的方式是通过 Event 对象。我通常将日历默认设置为“可编辑:false”,然后选择性地允许事件对象在每个对象的基础上进行编辑。我通过一个返回 JSON 的 web 服务 cfc 从 ColdFusion 生成我的事件,让 ColdFusion 决定谁可以编辑什么,然后使用 FullCalendar 进行显示。

于 2012-12-05T01:06:37.960 回答