ColdFusion:基于角色的应用选项?

时间:2011-07-10 01:43:25

标签: mysql coldfusion security-roles user-roles

我了解如何通过实施<cflogin>和角色来限制整个网页甚至组件。例如:

<cfif IsUserInRole("Admin") OR IsUserInRole("Accounting")>
    ...You can view this page...
<cfelse>
    ...You can not view this page...    
</cfif>

但是如何建议限制页面的某些方面?例如,允许“管理员”向所有用户发送全局消息,但该选项不适用于常规“用户”

我想我可以使用Session来操作我的视图(页面)。这通常是如何处理的?

2 个答案:

答案 0 :(得分:6)

你是对的,保护页面和保护元素是不同的。

在我看来,在实践中,我认为将任何代码绑定到角色或用户实际上是错误的方法。相反,将权限绑定到元素和页面 - 然后将角色绑定到这些权限。当然,用户也被分配了角色。

拥有这三个是很重要的:

  1. 用户
  2. 角色
  3. 权限&lt; - 这是您缺少的
  4. 权限是安全元素和页面,不是角色或用户您的代码应该没有线索(因为它不需要)有哪些用户或角色 - 只是权限名称。< / p>

    当用户登录时,我会抓住他们的角色。然后我获取分配给这些角色的所有权限(只是一个字符串值列表)。

    例如,在我可能拥有的页面上:

    • 添加项目
    • 查看项目
    • 删除项目

    当我对该页面进行编码时,我实际上使用名为similar(addItem,viewItem,deleteItem)的权限字符串来保护每个元素。

    <cfif listContainsNoCase( session.permissions, 'addItem' )>
        <!--- code to add item --->
    </cfif>
    

    (注意:我建议使用自定义标签或功能,但出于示例的目的,上述工作正常)。

    如果你这样做,它提供了最大的灵活性和抽象。如果您根据角色保护元素,则限制自己:

    • 添加新角色需要进行大量的代码更改!
    • 更改角色之间的权限需要进行大量的代码更改!

    如果您按上述方法执行此操作,则永远不需要在代码库中更改安全代码,因为“addItem”权限应始终位于“添加项目”逻辑上,对吧? :)

    现在,如果您碰巧需要创建一个“管理员”类型角色,该角色具有所有用户角色和少数几个管理员权限,您只需创建该角色,并为其分配正确的权限(可能是addItem和editItem,但是不是deleteItem)。巴姆!现在,我有一个管理员角色,可以分配给无代码更改的用户

    如果我用“用户这个角色”类型的东西撒上我的代码 - 我必须在任何地方编辑我的代码以允许我的新角色“经理” - 哎呀!

    有意义吗?

    =)

答案 1 :(得分:0)

当企业喜欢更改角色经常使用的权限时,事情开始变得很糟糕,因为他们不知道如何赋予某人某些权利。

因此,假设Marketing中的用户想要“更新”权限来执行某项任务。业务中的某个人为他们提供了更新权限。但是,IT经理还具有“更新”权限,这使他可以访问“营销更新”权限不应该访问的内容。

所以...我实际上更进了一步,并根据用户所在的部门指定了具有权限的角色。是的,它非常复杂且管理起来非常繁琐,因此我在寻找更好的问题时最终得到了这个问题这样做的方法。