1

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

我目前使用会话 cookie 将 Zend_Acl 与 Zend_Auth 结合使用,但我希望一些操作是 crontabbed,同时通过 Zend_Acl + Zend_Auth 保护密码(通常是从数据库等读取以刷新缓存的操作)。

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

4

1 回答 1

0

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 的参数并在那里处理信息。

于 2012-01-23T15:11:19.633 回答