加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 在具有相同控制器名称的模块化结构化应用程序中实现Zend_

发布时间:2020-12-13 16:23:13 所属栏目:PHP教程 来源:网络整理
导读:我是Zend Framework的新手.我在一个项目中开始学习它,我还在上学.我有点困在如何解决ACL和我的模块化结构(我真的很喜欢),并且在互联网上的研究似乎并没有产生我需要的信息.可能是因为我对框架还不是很有经验,但我仍然认为我会问这里.提前致谢! 目前,按照我
我是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完全分开.

这可能是也可能不是你项目中有用的方法,但我想我会把它作为一种可能性.祝好运!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读