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