使用保险丝的.cfm内的Fusebox 5.5权限属性检查

时间:2009-03-24 14:08:56

标签: coldfusion fusebox

我有一个标准的用户/角色设置,它在列表中返回当前用户的角色。然后,我使用permissions =“”属性和preFuseaction阶段来检查此用户是否有权访问此fuseaction。这允许显示页面的某些块,并为不同的用户提供一些禁止。

我无法在更细微的层面上做同样的事情,即将侧边栏中链接的显示压缩给没有权限的用户。说:

<ul>
   <li><a href="#xfa.mainmenu#>Main Menu</a></li>
   <li><a href="#xfa.adminmenu#>Admin Menu</a></li>
</ul>

只有具有“admin”角色的用户才能使用管理员菜单。如果普通用户点击此链接,他们就无法到达任何地方,因为当实际运行时,它会将其踢出去。我宁愿首先没有链接。

这可以通过将角色硬编码到.cfm文件中来完成,所以:

<ul>
   <li><a href="#xfa.mainmenu#>Main Menu</a></li>
   <cfif checkRole('admin') EQ TRUE><li><a href="#xfa.adminmenu#>Admin Menu</a></li></cfif>
</ul>

但如果可以查找circuit.xml中定义的权限并将其传递给checkRole()(可能通过传递xfa?)而不是静态值,那么它会更优雅一些。这可能与Fusebox创建的结构有关吗?

2 个答案:

答案 0 :(得分:2)

不要与真实比较 - 这是不必要的浪费时间......

<cfif checkRole('admin') >...</cfif>


但是,在显示文件中我会这样做:

<cfif StructKeyExists( Xfa , 'AdminMenu' )>
    <li><a href="#xfa.adminmenu#>Admin Menu</a></li>
</cfif>


然后,在您的circuit.xml文件中,您可以执行以下操作:

<fuseaction name="Menu">
    <do action="NormalMenuLinks"/>
    <do action="AdminMenuLinks"/>

    ...

</fuseaction>

<fuseaction name="NormalMenuLinks">
    <xfa name="MainMenu" value="..."/>

</fuseaction>

<fuseaction name="AdminMenuLinks" permissions="admin">
    <xfa name="AdminMenu" value="..."/>

</fuseaction>


我实际上并没有使用FB权限,因此我不知道上述内容是否会按预期工作。

如果没有,你可以这样做:

<fuseaction name="Menu">
    <do action="NormalMenuLinks"/>

    <if condition="checkRole('admin')">
    <true>
        <do action="AdminMenuLinks"/>
    </true>
    </if>

    ...

</fuseaction>


哪个有点难看,但应该有效。

当然,如果你只有一个XFA,你可以直接使用它而不是做单独的反应,但是如果你有多个XFA(特别是如果它们将在多个页面中使用)那么就可以使用XFA了fuseactions可以帮助保持整洁。

答案 1 :(得分:0)

不要认为它确实是Fusebox作业的一部分 - 定义对代码块的访问。每次设置XFA都不是真正灵活的IMO风格。

我通常使用安全令牌来限制访问。默认情况下,每个fuseaction名称都是令牌,开发人员可以添加其他自定义令牌。在你的情况下,自定义标记应该是'MainMenu'和'AdminMenu'。

我正在使用基于群组的安全性,因此融合权限看起来像'管理员,成员'。这是融合令牌的默认安全映射,例如'mycircuit.myfuseaction'。我在数据库中保留访问映射,因此第一次使用时,会将fuseaction和自定义标记推送到地图中,以后可以更改。

检查访问使用的简单方法(UDF)授予('TokenName'),它将当前用户组(在您的案例中为角色)与令牌映射进行比较:

<ul>
   <li><a href="#xfa.mainmenu#>Main Menu</a></li>
   <cfif granted('AdminMenu')><li><a href="#xfa.adminmenu#>Admin Menu</a></li></cfif>
</ul>

这种方式更灵活,使您能够为不同的令牌组定义默认访问级别,在STRICT(如果未定义时拒绝)和LOOSE(如果未定义则授予)模式等之间切换。

希望这有帮助。