2010-12-06 64 views
2

首先,我將粗略地描述上下文。我想有一個symfony應用程序,我可以創建各種領域。在每個區域中,您可以擁有不同類型的用戶(或角色)。每個用戶可以在不同的區域有多個角色。何處實現動態組的安全過濾器

爲了說明這個問題,我們將定義:

  • 2個區域: 「區域1」 和 「2區」。
  • 2個用戶:「用戶1」和「用戶2」。
  • 2個角色:「賣家」和「買家」。
  • 「用戶1」是賣方和在「區域1」的買方
  • 「用戶2」是賣方和在「區域1」僅在「區域2」
買方和買方

我的問題是:如果用戶屬於某個特定區域並且他在該區域具有所需角色,那麼這是檢查受限頁面的最佳方式。

思考了一下這件事之後,我也做了以下內容:

  1. 當創建一個區域,我也創建每個角色一個sfGuardGroup和該地區一個全球sfGuardGroup,每個區域後綴ID。因此,在我們的例子中,我們將有角色:
    • 區-1,賣家-1,買家-1區1
    • 區-2,賣家-2,買家-2區2
  2. 用戶被添加到相關組。因此,在我們的例子:
    • 用戶1將屬於組區域1,賣家-1和買家-1
    • 用戶2將屬於組區域1,賣家-1,買家-1,區域-2和買家-2
  3. 從URL,我知道我們是哪個區域,例如:

在這一點上,我有點卡住,因爲我不能讓出執行權限檢查的最佳場所:修改保護過濾器?改變行動?

回答

1

sfGuard不支持您所需的實現,因此我建議您創建一個新的附加安全過濾器。

您可以創建擴展sfFilter一個全新的過濾器,那麼現有的安全過濾後加入到filter.yml。這意味着由sfGuard提供的所有現有安全功能都會繼續。

然後,您可以確定通過查看當前模塊名稱和動作名稱正在請求的區域(你如何訪問這些不同取決於你所使用的symfony的版本,看在sfBasicSecurityFilter的線索),那麼將其與當前用戶使用的角色進行比較sfGuardSecurityUser

+0

謝謝你把我放在正確的軌道上。看來在一些測試後,我會設法使用自定義sfFilter去某個地方。 – 2010-12-07 15:03:33