Coldfusion 在fuse的.cfm中使用Fusebox 5.5权限属性检查

Coldfusion 在fuse的.cfm中使用Fusebox 5.5权限属性检查,coldfusion,fusebox,Coldfusion,Fusebox,我有一个标准的用户/角色设置,它在列表中返回当前用户的角色。然后,我使用permissions=“”属性和preFuseaction阶段检查此用户是否有权访问此fuseaction。这允许为不同的用户显示页面的某些块,并抑制某些块 我不能在更精细的层次上做同样的事情,也就是禁止没有权限的用户在侧边栏中显示链接。说: <ul> <li><a href="#xfa.mainmenu#>Main Menu</a></li> <

我有一个标准的用户/角色设置,它在列表中返回当前用户的角色。然后,我使用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创建的结构是否可能做到这一点?

不要与之相比,这是不必要的时间浪费

<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,您可以直接使用它,而不是单独进行FuseAction,但是如果您有多个XFA(特别是在多个页面中使用它们时)然后,在fuseactions中使用XFA可以帮助保持整洁。

    不要认为这是Fusebox工作的一部分——定义对代码块的访问。每次设置XFAs都不是很灵活

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

    我使用的是基于组的安全性,因此fuseaction权限看起来像“admins,members”。这是fuseaction令牌的默认安全映射,例如“mycircuit.myfuseaction”。我将access映射保存在数据库中,以便在第一次使用时将fuseaction和自定义令牌推送到映射中,并且可以在以后更改

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

    <ul>
       <li><a href="#xfa.mainmenu#>Main Menu</a></li>
       <cfif granted('AdminMenu')><li><a href="#xfa.adminmenu#>Admin Menu</a></li></cfif>
    </ul>
    
    这种方式更加灵活,可以为不同的令牌组定义默认访问级别,在严格(未定义时拒绝)和松散(未定义时授予)模式之间切换,等等


    希望这能有所帮助。

    谢谢,在初始测试中,第一个解决方案与权限配合良好,我可能会将其放入一个功能中,通过大量链接(例如,“导航检查”(“adminmenu”,“Admin Menu”)#在检查结构后发回