我花了一天时间寻找有关如何在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
答案 0 :(得分:5)
我承认自己不是Zend_Acl
专家,但对我而言,使用Zend_Acl
的本质是识别角色,资源和权限。角色通常非常明显。一旦你清楚地确定了资源,特权就会变得明显。
所以对我来说,关键是识别资源。
在您的情况下,听起来您已明确将控制器标识为资源。如果您需要更细粒度的访问控制,则可以将权限定义为操作。这似乎足够灵活,因此即使是不需要使用模型的控制器 - 可能只是向某个类型的登录用户显示的静态页面等 - 也可以进行ACL控制。
在某些情况下,您可能会发现您的资源/权限“自然地”与模型/方法相对应。但是,如果控制器/操作与您对程序流和ACL要求的理解更加匹配,我认为您不应该强迫您将ACL强制转换为该范例。
并非真正直接回答您的问题。更像是对自己阅读情况的建议。