我了解如何通过实施<cflogin>
和角色来限制整个网页甚至组件。例如:
<cfif IsUserInRole("Admin") OR IsUserInRole("Accounting")>
...You can view this page...
<cfelse>
...You can not view this page...
</cfif>
但是如何建议限制页面的某些方面?例如,允许“管理员”向所有用户发送全局消息,但该选项不适用于常规“用户”
我想我可以使用Session来操作我的视图(页面)。这通常是如何处理的?
答案 0 :(得分:6)
你是对的,保护页面和保护元素是不同的。
在我看来,在实践中,我认为将任何代码绑定到角色或用户实际上是错误的方法。相反,将权限绑定到元素和页面 - 然后将角色绑定到这些权限。当然,用户也被分配了角色。
拥有这三个是很重要的:
权限是安全元素和页面,不是角色或用户您的代码应该没有线索(因为它不需要)有哪些用户或角色 - 只是权限名称。< / p>
当用户登录时,我会抓住他们的角色。然后我获取分配给这些角色的所有权限(只是一个字符串值列表)。
例如,在我可能拥有的页面上:
当我对该页面进行编码时,我实际上使用名为similar(addItem,viewItem,deleteItem)的权限字符串来保护每个元素。
<cfif listContainsNoCase( session.permissions, 'addItem' )>
<!--- code to add item --->
</cfif>
(注意:我建议使用自定义标签或功能,但出于示例的目的,上述工作正常)。
如果你这样做,它提供了最大的灵活性和抽象。如果您根据角色保护元素,则限制自己:
如果您按上述方法执行此操作,则永远不需要在代码库中更改安全代码,因为“addItem”权限应始终位于“添加项目”逻辑上,对吧? :)
现在,如果您碰巧需要创建一个“管理员”类型角色,该角色具有所有用户角色和少数几个管理员权限,您只需创建该角色,并为其分配正确的权限(可能是addItem和editItem,但是不是deleteItem)。巴姆!现在,我有一个管理员角色,可以分配给无代码更改的用户!
如果我用“用户这个角色”类型的东西撒上我的代码 - 我必须在任何地方编辑我的代码以允许我的新角色“经理” - 哎呀!
有意义吗?
=)
答案 1 :(得分:0)
当企业喜欢更改角色经常使用的权限时,事情开始变得很糟糕,因为他们不知道如何赋予某人某些权利。
因此,假设Marketing中的用户想要“更新”权限来执行某项任务。业务中的某个人为他们提供了更新权限。但是,IT经理还具有“更新”权限,这使他可以访问“营销更新”权限不应该访问的内容。
所以...我实际上更进了一步,并根据用户所在的部门指定了具有权限的角色。是的,它非常复杂且管理起来非常繁琐,因此我在寻找更好的问题时最终得到了这个问题这样做的方法。