2011-08-29 50 views
1

使用Zend MVC來實現API訪問特定控制器動作的好方法是什麼?我通過Zend_Acl + Zend_Auth(通常是從數據庫等中讀取的動作來刷新緩存)保護密碼,但我希望某些動作是crontabbed,而密碼保護是通過Zend_Acl + Zend_Auth來實現的。Zend_Acl和Zend_Auth API key

我該如何利用Zend_Acl來跟蹤登錄的api鍵值,並根據這些值從Zend_Auth中讀取正確的標識/角色?

+1

您應該對cronjobs使用命令行腳本 – arnaud576875

+0

您正在使用哪種認證方案?消息認證碼(例如:HMAC,VMAC)?還有別的嗎? – netcoder

+0

目前,我只是簡單地使用用戶名/密碼進行LDAP身份驗證 –

回答

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的參數並處理那裏的信息。