首先,我将大致描述一下上下文。我想要一个 symfony 应用程序,我可以在其中创建各种区域。在每个区域中,您可以拥有不同类型的用户(或角色)。每个用户可以在不同的领域拥有多个角色。
为了说明这个问题,我们将定义:
- 2 个区域:“区域 1”和“区域 2”。
- 2 个用户:“用户 1”和“用户 2”。
- 2个角色:“卖方”和“买方”。
- “用户1”是“区域1”的卖家和买家
- “用户 2”是“区域 1”中的卖家和买家,以及“区域 2”中的买家
我的问题是:如果用户属于给定区域并且他是否在该区域具有所需的角色,这是检查受限页面的最佳方式。
在考虑了一下之后,我做了以下事情:
- 在创建区域时,我还为每个角色创建一个 sfGuardGroup 并为该区域创建一个全局 sfGuardGroup,每个都以区域 id 为后缀。因此,在我们的示例中,我们将拥有以下角色:
- 区域 1,卖家 1,区域 1 的买家 1
- 区域 2,卖家 2,区域 2 的买家 2
- 用户被添加到相关组。所以在我们的例子中:
- 用户 1 将属于组 area-1、sellers-1 和 Buyer-1
- 用户 2 将属于组 area-1、sellers-1、buyers-1、area-2 和 Buyer-2
- 从 URL 中,我知道我们在哪个区域,例如:
- http://example.com/area-1/sellers-restricted-page(组 area-1 和 Sellers-1 中的用户可以访问)
- http://example.com/area-2/buyers-restricted-page(组 area-2 和 Buyer-2 中的用户可以访问)
- http://example.com/area-2/(组 area-2 中的用户可以访问)
那时,我有点卡住了,因为我无法确定实施权限检查的最佳位置:修改保护过滤器?改变动作?