1

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

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

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

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

4

2 回答 2

6

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

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

拥有所有三个很重要:

  1. 用户
  2. 角色
  3. 权限<-这就是您所缺少的

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

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

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

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

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

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

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

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

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

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

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

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

说得通?

=)

于 2011-07-10T23:07:54.060 回答
0

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

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

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

于 2013-12-03T11:07:13.590 回答