Zend Acl数据库驱动加载所有数据

时间:2013-02-14 15:36:27

标签: zend-framework acl

我一直在阅读Zend框架的Zend_Acl组件。我想实现一个数据库驱动的解决方案,但注意到我已经从数据库加载所有角色,权限和资源来构建ACL。根据需要,将这些规则延迟加载到ACL中似乎不容易或不可能。看起来如果实现了任何延迟加载,整个Zend_Acl类必须被删除。有没有人有一个很好的例子来说明如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

我建议的方法是从数据库构建ACL并使用Zend_Cache对其进行缓存,这样就不需要为每个请求加载它。

首先,使用$acl = new Zend_Acl();构建ACL对象然后从DB获取您的角色,资源和权限。循环浏览您的资源和角色,并使用$acl->addResource()$acl->addRole()添加它们,然后使用$acl->allow()

添加权限

假设您已经引导了$cache对象,并且可以在这里(通过Zend_Registry或其他任何方式),请执行以下操作:

if (($acl = $cache->load('acl')) === false) {
  $acl = $this->_buildACL(); // Build you ACL in the _buildAcl() method
  $cache->save($acl, 'acl', array('ACL'));
}
Zend_Registry::set('acl', $acl);