关于php:Zend Acl-模块,控制器,操作和模型

Zend Acl - Modules, Controllers, Actions and Models

我花了整整一天的时间在SO上寻找关于如何实现Zend_Acl的教程和答案,就像在其他站点中一样。我头疼。 :X

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

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

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

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

1
2
3
4
5
6
7
8
9
10
application
  - MYAPP
    - configs
    - controllers
    - layouts
    - views
    - library
       - MYAPP ;This folder is in the include path
    - modules
       - admin


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

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

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

在某些情况下,您会发现您的资源/特权"自然"对应于模型/方法。但是我认为,如果控制器/动作与您对程序流程和ACL要求的理解更加紧密地匹配,您不应该强迫自己将ACL纳入该范式。

这并不是您问题的直接答案。更像是忠实于您自己阅读情况的建议。