【发布时间】:2011-08-17 21:20:30
【问题描述】:
以Zend_ACL 为例,我想知道如何为项目组织它。当然,这个例子很好很简洁,但一个真实的网站要复杂得多。
$acl = new Zend_Acl();
$acl->addRole(new Zend_Acl_Role('guest'));
$acl->addRole(new Zend_Acl_Role('member'));
$acl->addRole(new Zend_Acl_Role('admin'));
$parents = array('guest', 'member', 'admin');
$acl->addRole(new Zend_Acl_Role('someUser'), $parents);
$acl->add(new Zend_Acl_Resource('someResource'));
$acl->deny('guest', 'someResource');
$acl->allow('member', 'someResource');
echo ($acl->isAllowed('guest', 'someResource') ? 'allowed' : 'denied');
鉴于我网站上的每个控制器/页面都会进行某种访问检查,我需要这些规则在全球范围内可用。这是否意味着我需要创建一个庞大的配置文件或类来设置所有加载规则?那不会浪费很多内存吗?
但是,如果我只设置每个控制器所需的规则,这会破坏 ACL 的目的,对吗?使用 ACL 的主要原因是避免权限像这样分布在整个代码库中:
Admin_Controller
{
public function action()
{
if($user->role !== 'admin')
{
die('not allowed');
}
}
}
变化呢?如果 ACL 规则存储在管理员可以轻松更改权限的数据库中会怎样。每个页面请求都应该下载它们吗?这不会给系统带来很大的负担吗?
简而言之,ACL 如何在大型站点上工作?会出现什么问题?如何处理级联权限?
【问题讨论】:
标签: php permissions acl