2010-12-06 17 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