2013-02-14 47 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);