2
我一直在閱讀Zend框架的Zend_Acl組件。我想實現一個數據庫驅動的解決方案,但已經注意到它看起來像我要加載數據庫中的所有角色,權限和資源來構建一個ACL。它看起來並不容易,也可能根據需要將這些規則延遲加載到ACL中。它看起來像是實現了任何延遲加載,整個Zend_Acl類必須被刪除。有沒有人有這樣一個良好的例子可以實現?Zend Acl數據庫驅動加載所有數據
我一直在閱讀Zend框架的Zend_Acl組件。我想實現一個數據庫驅動的解決方案,但已經注意到它看起來像我要加載數據庫中的所有角色,權限和資源來構建一個ACL。它看起來並不容易,也可能根據需要將這些規則延遲加載到ACL中。它看起來像是實現了任何延遲加載,整個Zend_Acl類必須被刪除。有沒有人有這樣一個良好的例子可以實現?Zend Acl數據庫驅動加載所有數據
我建議的方法是從數據庫中構建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);
懶加載如何知道要加載的資源或規則? – 2013-02-14 17:45:10