【问题标题】:ColdFusion: Application Options Based on Role?ColdFusion:基于角色的应用程序选项?
【发布时间】:2011-10-02 02:11:07
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: mysql coldfusion security-roles user-roles


    【解决方案1】:

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

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

    三者齐备很重要:

    1. 用户
    2. 角色
    3. 权限

    权限是安全元素和页面,不是角色或用户您的代码应该不知道(因为它不需要)存在哪些用户或角色 - 只是权限的名称。

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

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

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

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

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

    (注意:我建议为此使用自定义标签或函数,但出于示例的目的,上面的工作正常)。

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

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

    如果你按照上面提到的那样做,你永远不需要在代码库中更改你的安全代码,因为“addItem”权限应该总是在“add item”逻辑上,对吧? :)

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

    如果我在我的代码中添加了“用户是这个角色”类型的东西 - 我将不得不到处编辑我的代码以允许我的新角色“经理” - 哎呀!

    有意义吗?

    =)

    【讨论】:

      【解决方案2】:

      当企业喜欢更改角色经常拥有的权限时,事情就开始出错了,因为他们不知道如何赋予某人做某事的权利。

      假设市场营销中的用户想要“更新”权限来执行某些任务。业务中的某个人授予他们更新权限。但 IT 经理也拥有“更新”权限,这使他可以访问市场营销的更新权限不应访问的内容。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-17
        • 1970-01-01
        • 2023-03-07
        相关资源
        最近更新 更多