首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何组织和管理ACL?

如何组织和管理ACL?
EN

Stack Overflow用户
提问于 2011-05-03 16:49:24
回答 1查看 1K关注 0票数 2

ACL为例,我想知道如何组织一个项目。当然,这个例子很不错,但是一个真正的站点要复杂得多。

代码语言:javascript
复制
$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的主要原因是避免权限在整个代码基中传播,如下所示:

代码语言:javascript
复制
Admin_Controller
{
    public function action()
    {
        if($user->role !== 'admin')
        {
            die('not allowed');
        }
    }
}

那改变呢?如果ACL规则存储在管理员可以轻松更改权限的数据库中,该怎么办?每个页面请求都应该下载吗?难道这不会给系统带来很大负担吗?

简而言之,是如何在大型站点上工作的?出了什么问题?如何处理级联权限?

EN

回答 1

Stack Overflow用户

发布于 2011-05-04 09:35:36

您可以使用memcache将角色存储在数据库中,并将对象缓存在内存中,这样只需要在添加或更改新角色时查询db。至于实现ACL,因为它将在系统范围内使用,您可以在Bootstrap.php文件中初始化它,然后将对象存储在Zend_Registry中,以便整个应用程序都可以访问它。

应用这些规则可以在不同的时间点发生。您可能希望在自定义路由器中应用这些路由,或者在控制器级别上应用更高级别的路由。如果您扩展了Zend_Controller_Action,您可以将您的ACL规则放在这个主控制器中,每个其他控制器都是从这个主控制器中派生出来的。可以在_init()方法中检查ACL权限。系统中可能有其他点需要ACL,或者希望检查ACL,这取决于您构建ACL的内容和方式(这就是为什么要将ACL存储在注册表中)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5872867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档