Zend_Acl和Zend_Auth api密钥方法



使用Zend MVC实现访问特定控制器动作的api键的好方法是什么?

我目前有Zend_Acl组合Zend_Auth使用会话cookie,但我希望一些动作是crontab,而密码保护通过Zend_Acl + Zend_Auth(通常是一个动作从数据库等读取刷新缓存)。

我如何利用Zend_Acl来跟踪api密钥登录,并根据这些从Zend_Auth读取正确的身份/角色?

Zend_Auth将为您处理大部分身份验证。使用

$auth = Zend_Auth::getInstance();
if (!$auth->hasIdentity()) {
    //call a custom login action helper to try login with GET-params
}
if ($auth->hasIdentity())
    $identity = $auth->getIdentity(); 
    //...
}

现在您可以根据身份确定Zend_Acl_Role。我总是为每个用户创建一个新角色,并让这个角色"继承"该用户实际拥有的所有通用角色。

// specific user with $identity is given the generic roles staff and marketing
$acl->addRole(new Zend_Acl_Role('user'.$identity), array('staff', 'marketing'));

当然可以从数据库中检索角色数组。然后,您必须指定每个角色的权限。你可以硬编码,也可以将这些信息保存在数据库中。

$acl->allow('marketing',
        array('newsletter', 'latest'),
        array('publish', 'archive'));

在你的控制器中,你现在可以检查

$acl->isAllowed('user'.$identity, Zend_Acl_Resource ...)

如果您有更复杂的访问控制,其中权限依赖于某些类(可能是MCV模型)中的信息,请让这些类实现Zend_Acl_Resource_Interface。然后使用这个类作为Zend_Acl_Assertion的参数,并处理那里的信息。

相关内容

  • 没有找到相关文章

最新更新