【问题标题】:Zend Acl Database Driven Load all dataZend Acl 数据库驱动加载所有数据
【发布时间】:2013-02-14 15:36:27
【问题描述】:

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

【问题讨论】:

  • 延迟加载如何知道要加载哪些资源或规则?

标签: zend-framework acl


【解决方案1】:

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

首先,使用$acl = new Zend_Acl(); 构建ACL 对象,然后从数据库中获取您的角色、资源和权限。循环访问您的资源和角色并使用$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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多