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 将属于组 area-1、sellers-1 和 Buyer-1
    • 用户 2 将属于组 area-1、sellers-1、buyers-1、area-2 和 Buyer-2
  3. 从 URL 中,我知道我们在哪个区域,例如:

那时,我有点卡住了,因为我无法确定实施权限检查的最佳位置:修改保护过滤器?改变动作?

4

1 回答 1

1

sfGuard 不支持您所需的实现,因此我建议创建一个新的附加安全过滤器。

您可以创建一个扩展sfFilter的全新过滤器,然后将其添加到现有安全过滤器之后的filter.yml中。这意味着 sfGuard 提供的所有现有安全功能将继续存在。

然后,您可以通过查看当前模块名称和操作名称来确定正在请求的区域(访问这些区域的方式取决于您使用的 symfony 版本,在sfBasicSecurityFilter中查找线索)然后将其与角色进行比较当前用户已使用sfGuardSecurityUser

于 2010-12-06T12:13:59.567 回答