2013-02-14 45 views
2

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

+0

懒加载如何知道要加载的资源或规则? – 2013-02-14 17:45:10

回答

1

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

首先,使用$acl = new Zend_Acl();构建ACL对象然后从数据库中获取您的角色,资源和权限。通过你的资源和角色的循环,并添加他们$acl->addResource()$acl->addRole(),然后用$acl->allow()

假设你已经自举你$cache对象添加权限,它可以在这里找到(通过合适的词汇或其他),这样做:

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