根据用户角色更改FullCalendar中的全局“可编辑”回调值

时间:2012-12-03 19:27:03

标签: coldfusion fullcalendar

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

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

我尝试了什么:

$("#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编程的新手)? FullCalendar editable选项不允许使用函数吗?

我可以通过对每个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
        // ...
}

并且只有在用户角色为“Admin”时才会继续,但我希望能够更全面地设置角色。

想法?

1 个答案:

答案 0 :(得分:1)

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

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

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

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