php – 在具有相同控制器名称的模块化结构化应用程序中实现Zend_
我是Zend Framework的新手.我在一个项目中开始学习它,我还在上学.我有点困在如何解决ACL和我的模块化结构(我真的很喜欢),并且在互联网上的研究似乎并没有产生我需要的信息.可能是因为我对框架还不是很有经验,但我仍然认为我会问这里.提前致谢!
目前,按照我研究的大多数最佳实践,我创建了一个模块化结构,如下所示: application/ modules/ admin/ default/ 我使用插件来控制我的ACL,就像这样(为了简单/可读性,我只添加了一小部分): $acl = new Zend_Acl(); $acl->addRole(new Zend_Acl_Role('guest')) ->addRole(new Zend_Acl_Role('member'),'guest'); ->addRole(new Zend_Acl_Role('admin'),'member'); $acl->addResource(new Zend_Acl_Resource('index')); ->addResource(new Zend_Acl_Resource('admin:index')); $acl->allow('guest','index',array('index')); ->allow('member',array('userpanel')); ->allow('admin'); 无论如何,ACL在默认模块上工作正常 – 甚至在管理模块上也是如此,但是当我有相同的控制器名称和操作时会出现问题,例如: This action will allow users to edit their own account Module: Default Controller: User Action: Edit This action will allow an admin to edit any account Module: Admin Controller: User Action: Edit 当我将规则设置为ACL时,如下所示: $acl->allow('member','user',array('edit')); 用户还可以访问用户控制器上的管理员编辑页面.如何告诉ACL模块之间存在差异?我看到很多例子在向ACL添加资源时使用“admin:user”而不是“user”作为控制器/资源名称.但是,当控制器和/或操作名称相同时,这似乎不起作用. 所以 – 最大的问题是:我如何在目前的情况下解决这个问题,或者你如何建议我构建我的应用程序以避免一起出现问题?我宁愿不使用像“Admin_AdminUserController”这样的额外控制器前缀,也不想只是将模块一起移除,只需要制作“adminEditAction”等. 解决方法
我对别人的意见也很感兴趣,但我想我会为你提供一个可能的解决方案.
在我当前的项目中,我使用单独的ACL作为我的默认(最终用户)模块和我的管理模块.除此之外,对于管理模块,我扩展了Zend_Auth并将其设置为使用不同的会话命名空间(Zend_Auth_admin),因此用户登录与管理登录完全隔离.一个人可以作为用户和管理员同时登录,因为它使用两个不同的Zend_Session名称空间. 也就是说,我们仍然在用户ACL中具有管理员角色,因为我们允许管理员用户从管理模块登录任何用户帐户(没有个人/敏感信息是我们用户帐户的一部分). 在我们的例子中,当管理员ACL和用户ACL分开时,读取和理解ACL会容易得多,因为管理ACL有很多规则,而且某些逻辑与用户ACL完全分开. 这可能是也可能不是你项目中有用的方法,但我想我会把它作为一种可能性.祝好运! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |