2

まず、文脈を大まかに説明します。さまざまな領域を作成できる symfony アプリケーションが必要です。それぞれの領域で、さまざまな種類のユーザー (またはロール) を持つことができます。各ユーザーは、さまざまな領域で複数の役割を持つことができます。

質問を説明するために、次のように定義します。

  • 「エリア1」と「エリア2」の2エリア。
  • 2 ユーザー: 「ユーザー 1」と「ユーザー 2」。
  • 「売り手」と「買い手」の2つの役割。
  • 「ユーザー 1」は「エリア 1」の売り手と買い手です。
  • 「ユーザー 2」は「エリア 1」では売り手と買い手、「エリア 2」だけでは買い手

私の質問は、ユーザーが特定の領域に属しており、その領域で必要な役割を持っているかどうかを制限されたページにチェックインする最良の方法です。

少し考えた結果、以下のようにしました。

  1. エリアが作成されると、ロールごとに 1 つの sfGuardGroup と、エリア用に 1 つのグローバル sfGuardGroup も作成し、それぞれにエリア ID のサフィックスを付けます。したがって、この例では、次の役割があります。
    • エリア 1、セラー 1、エリア 1 のバイヤー 1
    • エリア 2、売り手 2、エリア 2 の買い手 2
  2. ユーザーが関連するグループに追加されます。したがって、この例では次のようになります。
    • ユーザー 1 は、グループ area-1、sellers-1、buyers-1 に属します。
    • ユーザー 2 は、グループ area-1、sellers-1、buyers-1、area-2、buyers-2 に属します。
  3. URL から、私たちがどの地域にいるのかがわかります。たとえば、次のようになります。

その時点で、アクセス許可チェックを実装するのに最適な場所がわからないので、ちょっと行き詰まりました: ガード フィルターを変更しますか? アクションを変更しますか?

4

1 に答える 1

1

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

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

次に、現在のモジュール名とアクション名を調べることで、どの領域が要求されているかを判断できます (これらにアクセスする方法は、使用している symfony のバージョンによって異なります。手がかりとしてsfBasicSecurityFilterを調べます)。現在のユーザーはsfGuardSecurityUserを使用しています。

于 2010-12-06T12:13:59.567 に答える