gpt4 book ai didi

php - 在具有相同 Controller 名称的模块化结构化应用程序中实现 Zend_Acl

转载 作者:可可西里 更新时间:2023-10-31 23:24:30 26 4
gpt4 key购买 nike

我是 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', 'index', array('userpanel'));
->allow('admin');

无论如何,ACL 在默认模块上都可以正常工作 - 即使在管理模块上也是如此,但是当我有相同的 Controller 名称和操作时就会出现问题,例如:

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'));

用户也将被允许访问用户 Controller 上的管理员编辑页面。我如何告诉 ACL 模块之间存在差异?我见过许多示例在将资源添加到 ACL 时使用“admin:user”而不是“user”作为 Controller /资源名称。但是,当 Controller 和/或操作名称相同时,这似乎不起作用。

所以 - 最大的问题是:在我目前的情况下我该如何解决这个问题,或者你会建议我如何构建我的应用程序来避免这个问题?我宁愿不求助于使用额外的 Controller 前缀,如“Admin_AdminUserController”,或者只是一起删除模块,只制作“adminEditAction”等。

最佳答案

我也对其他人所说的感兴趣,但我想我会为您提供一个可能的解决方案。

在我当前的项目中,我为默认(最终用户)模块和管理模块使用了单独的 ACL。除此之外,对于管理模块,我扩展了 Zend_Auth 并将其设置为使用不同的 session namespace (Zend_Auth_admin),因此用户登录与管理员登录完全隔离。一个人可以同时作为用户和管理员登录,因为它使用两个不同的 Zend_Session 命名空间。

也就是说,我们在用户 ACL 中仍然具有管理员角色,因为我们允许管理员用户从管理员模块登录到任何用户帐户(我们的用户帐户中没有个人/敏感信息)。

同样在我们的案例中,当管理员和用户 ACL 分开时,阅读和理解 ACL 会容易得多,因为管理员 ACL 有很多规则,并且一些逻辑与用户 ACL 完全分开。

这在您的项目中可能是也可能不是有用的方法,但我认为我会把它放在那里作为一种可能性。祝你好运!

关于php - 在具有相同 Controller 名称的模块化结构化应用程序中实现 Zend_Acl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8713234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com