2

我花了一天时间寻找有关如何在 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
4

1 回答 1

5

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

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

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

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

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

于 2011-06-12T08:06:50.807 回答