Zend_Acl и Zend_Auth API-ключ подход - PullRequest
1 голос
/ 29 августа 2011

Каков хороший способ реализации API-ключей для доступа к определенным действиям контроллера с помощью Zend MVC?

В настоящее время у меня есть Zend_Acl в сочетании с Zend_Auth с использованием файлов cookie сеанса, но я хочу, чтобы некоторые действия были зарезервированы, а пароль защищен с помощьюZend_Acl + Zend_Auth (Обычно это действие для чтения из базы данных и т. Д. Для обновления кэша).

Как я могу использовать Zend_Acl для отслеживания ключей API для входа в систему и чтения правильных идентификаторов / ролей из Zend_Auth на основе этих

1 Ответ

0 голосов
/ 23 января 2012

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 и обрабатываете информацию там.

...