2011-08-29 4 views
1

Zend MVC를 사용하여 특정 컨트롤러 작업에 액세스하기위한 API 키를 구현하는 좋은 방법은 무엇입니까?Zend_Acl 및 Zend_Auth API 키 접근법

현재 세션 쿠키를 사용하여 Zend_Acl과 Zend_Auth가 조합되어 있지만 Zend_Acl + Zend_Auth를 통해 암호로 보호되는 동안 (일반적으로 캐시를 새로 고치기 위해 데이터베이스 등을 읽는 작업) crontabbed가 필요한 작업이 필요합니다.

로그인을 위해 API 키를 추적하고 Zend_Auth에서 올바른 ID/역할을 읽으려면 어떻게해야합니까?

+1

cronjobs에 명령 줄 스크립트를 사용해야합니다. – arnaud576875

+0

어떤 인증 체계를 사용하고 있습니까? 메시지 인증 코드 (예 : HMAC, VMAC)? 다른 것? – netcoder

+0

현재 세션에 저장된 ID로 LDAP에 대해 인증 된 사용자 이름/비밀번호를 사용하고 있습니다. –

답변

0

Zend_Auth가 대부분의 인증을 처리합니다. 이제 정체성을 기반으로 Zend_Acl_Role를 확인할 수 있습니다

$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(); 
    //... 
} 

을 따라 뭔가를 사용하십시오. 나는 항상 각 사용자에 대해 새로운 역할을 만들고 사용자가 실제로 가지고있는 모든 일반 역할을 '상속'하도록합니다.

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

물론 데이터베이스에서 역할 배열을 검색 할 수 있습니다. 그런 다음 각 역할의 권한을 지정해야합니다. 이 정보를 하드 코딩하거나 데이터베이스에 저장할 수도 있습니다. 당신이 권리를 일부 클래스 (아마 MCV 모델) 내부의 정보에 따라 더 복잡한 액세스 제어가있는 경우

컨트롤러에서
$acl->allow('marketing', 
     array('newsletter', 'latest'), 
     array('publish', 'archive')); 

이제이 클래스가 구현 한

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

을 확인할 수 있습니다 Zend_Acl_Resource_Interface. 그런 다음이 클래스를 Zend_Acl_Assertion의 매개 변수로 사용하고 거기에서 정보를 처리합니다.