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が1つしかない場合は、個別のフュージョンアクションを実行するのではなく、直接使用できますが、複数のXFAがある場合(特に複数のページで使用される場合)、フュージョンアクションにXFAを含めると役立ちます。物事を整頓してください。

于 2009-03-24T14:21:43.273 に答える
0

コードブロックへのアクセスを定義するという、Fuseboxの仕事の一部だとは思わないでください。毎回XFAを設定することは、実際には柔軟なスタイルのIMOではありません。

私は通常、セキュリティトークンを使用してアクセスを制限しています。各fuseaction名はデフォルトでトークンですが、他のカスタムトークンは開発者が追加できます。あなたの場合、カスタムトークンは「MainMenu」と「AdminMenu」になります。

私はグループベースのセキュリティを使用しているので、fuseaction権限は「admins、members」のようになります。これは、fuseactionトークンのデフォルトのセキュリティマッピングです。たとえば、「mycircuit.myfuseaction」です。アクセスマップをデータベースに保持しているので、fuseactionとカスタムトークンは、最初に使用したときにマップにプッシュされ、後で変更できます。

アクセスを確認するには、現在のユーザーグループ(この場合はロール)をトークンマップと比較するsimple method(UDF)granted('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 に答える