2010-12-06 7 views
2

まず、文脈を荒々しく説明します。私はさまざまな分野を作成できるsymfonyアプリケーションを用意したいと思っています。それぞれの分野で、さまざまな種類のユーザー(または役割)を持つことができます。各ユーザーは、異なる分野で複数の役割を持つことができます。 動的グループのセキュリティフィルタを実装する場所

が問題を説明するために、我々は定義します:

  • 2分野: "エリア1" と "エリア2"。
  • 2人のユーザー:「ユーザー1」と「ユーザー2」。
  • 2つの役割: "売り手"と "買い手"。
  • は「ユーザー1」は、売り手と「エリア1」の買い手である
  • 「ユーザー2」は、売り手とのみ「エリア2」
で「エリア1」で買い手と買い手であります

私の質問はです。これは、ユーザーが特定の領域に所属し、その領域に必要な役割を果たす場合、制限付きページをチェックインする最も良い方法です。それについて少し考えた後、私は次のことを行っている

  1. 領域が作成されると、私も地域の役割ごとに1 sfGuardGroupと一つのグローバルsfGuardGroupを作成し、地域との接尾辞それぞれid。だから、私たちの例では、我々は役割を持っています:
    • エリア-1、売り手-1、バイヤー-1領域の1
    • エリア-2、売り手-2、バイヤー-2エリア2
    のために
  2. ユーザーが関連するグループに追加されます。だから、私たちの例では:
    • ユーザー1は、グループエリア-1に属し売り手-1と買い手-1
    • ユーザー2は、グループエリア-1、売り手-1、バイヤー-1、領域に属しますでしょう-2と買い手-2 URLから
  3. は、私が知っている中、私たちは、どの領域、例えば:

は、私は一種のスタック私はパーミッションチェックを実装するのに最適な場所を作ることができないようだ:ガードフィルタを変更します?アクションを変更しますか?

答えて

1

必要な実装はsfGuardではサポートされていませんので、新しい追加のセキュリティフィルタを作成することをお勧めします。

あなたは、既存のセキュリティフィルタの後filter.ymlにそれを追加し、sfFilterを拡張して新しいフィルタを作成することができます。つまり、sfGuardによって提供される既存のセキュリティ機能はすべて継続されます。

あなたは、現在のモジュール名とアクション名を見ることで、要求されているエリアを決定することができます(あなたがこれらは、使用しているのsymfonyのバージョンに依存して異なっているどのようにアクセスするか、手がかりのためsfBasicSecurityFilterに見える)、その後現在のユーザーが使用しているロールと比較してください。sfGuardSecurityUser

+0

私を正しい軌道に乗せてくれてありがとう。いくつかのテストの後、私はカスタムsfFilterを使ってどこかへ行きます。 –