【问题标题】:Zend Acl - Modules, Controllers, Actions and ModelsZend Acl - 模块、控制器、动作和模型
【发布时间】:2011-06-11 20:53:04
【问题描述】:

我花了一天时间在 SO 和其他网站上寻找有关如何在 SO 上实现 Zend_Acl 的教程和答案。而且我很头疼。 :X

我看到人们使用它来允许或禁止访问某些控制器/操作,而其他人则说这种方式不正确,应该根据模型允许或禁止访问。嗯,第二个似乎可行,但是,这意味着对于每个控制器我都需要一个模型?因为看起来,在第二种选择之后,我只能在例如编辑帖子时阻止用户访问。但我想阻止访问编辑帖子的控制器的操作。

如果我想阻止角色 X 的用户访问控制器 Z 的操作 Y,如果我遵循第二种选择,我该怎么做?

非常欢迎提供真实应用程序的示例。

这些信息可以改善你的答案: 我使用 Doctrine 2 作为 ORM,并且我有一个模块 Admin。我的应用程序的实际结构是这样的:

application
  - MYAPP
    - configs
    - controllers
    - layouts
    - views
    - library
       - MYAPP ;This folder is in the include path
    - modules
       - admin

【问题讨论】:

  • 老兄 - 您需要提供更多信息。针对您的具体情况,您的 ACL 配置是什么。我希望您添加一些 sn-ps 代码,以便我们理解您的问题。
  • @emeraldjava,我没有实际的 ACL 配置,就像我说的那样,我对现有的各种实现感到困惑。以下是我一直在阅读的一些链接,可以看出,它们遵循不同的路径:weierophinney.net/matthew/archives/…stackoverflow.com/questions/2046608/…

标签: php model-view-controller zend-framework doctrine-orm zend-acl


【解决方案1】:

我承认自己不是Zend_Acl 专家,但对我来说,使用Zend_Acl 的本质是识别角色、资源和权限。角色通常很明显。一旦您清楚地确定了资源,特权通常就会变得显而易见。

所以对我来说,关键是识别资源

在您的情况下,听起来您已明确将 控制器 标识为资源。如果您需要更细粒度的访问控制,则可以将权限定义为操作。这似乎足够灵活,以至于即使是不需要使用模型的控制器(可能只应向特定类型的登录用户显示的静态页面等)也可以受到 ACL 控制。

在某些情况下,您可能会发现您的资源/权限“自然”对应于模型/方法。但是,如果控制器/操作更符合您对程序流程和 ACL 要求的理解,我认为您不应该强迫您的 ACL 进入该范例。

不是真正直接回答您的问题。更像是忠于自己对情况的解读的建议。

【讨论】:

  • 完全同意,您可以根据模块(允许/禁止模块)以不同的资源级别结束,然后对于其他模块,您可以根据控制器阻止访问,然后是其他操作,以及其他模型等。不要犹豫,为每个策略构建几个独立的 Acl 对象(并缓存它们)(每个模块有 1 个策略通常很有用)
  • 感谢您的回复。 @regilero你是说如果我有几种类型的资源,我需要为每种类型定义一个acl(一个基于控制器,另一个基于模型)?
  • @Jonathan:是的,你可以,这不是你必须,但如果你想应用多层 ACL 检查,你应该尝试拥有几个 Acl 对象,这样你就可以保持它们的小、易于理解和单位- 可测试(并且可缓存 - 有时具有大量规则的大型 ACL 对象甚至应该按角色拆分)。
猜你喜欢
  • 2012-05-02
  • 1970-01-01
  • 1970-01-01
  • 2012-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
相关资源
最近更新 更多