2011-05-08 99 views
0

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

因此,举例来说: 我的'供应商'角色默认可以通过'创建','编辑'和'查看'权限访问'发票'资源。 所以我的发票服务我会成为'发票'资源与方法创建,编辑,查看和删除(但默认情况下只有角色管理员可以删除发票。

对于具有供应商角色的特定用户,我想为了能够授予删除权限,或者对于有供应商角色的其他用户,我可能希望能够拒绝编辑权限。这种即时通讯思维必须以某种方式持久化并动态加载。

因此,以我的实际问题(s)。 我对此有错? 同样如何用Zend Navigation实现这样的解决方案?

任何想法指针经验教训反馈将不胜感激。

对不起,如果我做了一个废话的工作,我的解释整夜都在。

+0

听起来像你有关于角色,资源和特权的正确想法。一个问题:当你问怎么用'Zend_Navigation'完成这个操作时,你的意思是用Zend_Acl吗?看看[这个答案](http://stackoverflow.com/questions/5925970/zend-acl-how-to-design-role-based-acl-for-multiple-small-teams/5926152#5926152)for关于'Zend_Acl'的一些想法。 – 2011-05-08 13:16:37

回答

0

是的,就像大卫说的你是在正确的轨道上。 Zend_Navigation与Zend_Acl非常好地搭配。您可以在xml或ini文件中定义导航,为每个页面分配一个资源和所需的特权,然后将ACL和导航容器注入到导航视图助手中。您还可以将导航助手的当前角色设置为当前登录的用户,这将根据ACL显示或隐藏导航元素。

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

至于定义你的ACL,你可以做的是定义在一个单一的PHP文件所有的角色和资源一样简单的东西,或者你可以有一个更灵活的方法,并且此信息存储在数据库中,并建立相应的ACL。你一定想用后一种方法缓存ACL。