1

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

我不能在更细粒度的级别上做同样的事情,即禁止在侧边栏中向没有权限的用户显示链接。说:

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

管理员菜单应该只对具有“管理员”角色的用户可用。如果普通用户点击这个链接,他们什么也得不到,因为当 fuseaction 实际运行时,它会把他们踢出去。我宁愿一开始就没有链接。

这可以通过将角色硬编码到 .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 创建的结构有关吗?

4

2 回答 2

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,你可以直接使用它而不是做单独的 fuseactions,但是如果你有多个 XFAs(特别是如果它们将在多个页面中使用),那么在 fuseactions 中使用 XFAs 会有所帮助保持整洁。

于 2009-03-24T14:21:43.273 回答
0

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

我通常使用安全令牌来限制访问。每个fuseaction名称默认为token,其他自定义token可由开发者添加。在您的情况下,自定义令牌应该是“MainMenu”和“AdminMenu”。

我正在使用基于组的安全性,因此 fuseaction 权限看起来像“管理员,成员”。这是 fuseaction 令牌的默认安全映射,例如“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(如果未定义则授予)模式等之间切换。

希望这可以帮助。

于 2009-03-25T09:13:16.953 回答