【问题标题】:Zend Acl in Service Layer/Navigation服务层/导航中的 Zend Acl
【发布时间】:2011-05-08 12:47:59
【问题描述】:

我正在使用 zend 框架开发一个“我认为很简单”的应用程序。这是我使用 zf 的第四个应用程序,但我是第一个使用动态 ACL 的应用程序。应用程序使用标准 MVC 设置和由服务层组成的模型/域层来访问通过映射器映射的模型(popo)。对于每个模型,我都有相应的服务和映射器。我想让我的 UserModel 实现 Role 接口,然后我所有基于模型的服务都实现 Resource 接口。此外,我希望基于静态角色指定预定义的权限,但也能够根据用户的角色更改每个用户的指定权限;

例如: 我是“供应商”角色,默认情况下可以使用“创建”、“编辑”和“查看”权限访问“发票”资源。 所以我的 InvoiceService 我将成为具有创建、编辑、查看和删除方法的“发票”资源(但默认情况下,只有角色管理员可以删除发票。

对于具有供应商角色的特定用户,我希望能够授予删除权限,或者对于具有供应商角色的其他用户,我可能希望能够拒绝编辑权限。我的这种想法必须以某种方式持续存在并动态加载。

所以对于我的实际问题。 我会以错误的方式解决这个问题吗? 另外,如何使用 Zend Navigation 实现这样的解决方案?

任何想法指针课程反馈将不胜感激。

抱歉,如果我的解释一夜未眠,我做得很糟糕。

【问题讨论】:

  • 听起来您对角色、资源和权限的想法是正确的。一个问题:当你问到如何使用Zend_Navigation 时,你的意思是Zend_Acl 吗?查看this answer 了解有关Zend_Acl 的一些想法。

标签: zend-framework acl


【解决方案1】:

是的,正如 David 所说,您走在正确的轨道上。 Zend_Navigation 与 Zend_Acl 配合得非常好。您可以在 xml 或 ini 文件中定义导航,为每个页面分配资源和所需的权限,然后将 ACL 和导航容器注入导航视图帮助程序。您还可以将导航助手的当前角色设置为当前登录的任何人,这将根据 ACL 显示或隐藏导航元素。

我会说在导航容器中定义所有这些页面有点乏味和冗长,但并不困难。

至于定义 ACL,您可以做一些简单的事情,例如在单个 php 文件中定义所有角色和资源,或者您可以采用更灵活的方法并将这些信息存储在数据库中并构建 acl。您肯定希望使用后一种方法缓存 ACL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多