我推薦曼寧出版的書「Zend框架在行動」作爲一個偉大的,跟上時代的,介紹這一點。它的問世爲PDF格式下載,這樣你就可以擁有它現在:)
但是,爲了回答這個特定問題:
讓我們先來定義兩個關鍵術語開始。 Zend_Auth中的「身份驗證」指身份驗證,它證明某人是他們所說的人(即登錄)。 Zend_Acl中的「A」是指授權,它證明某人有權做他們想做的事(即訪問控制)。
假設用戶只有一個角色... 將用戶的角色存儲在Zend_Auth的一部分「身份」中。 在登錄:
$auth = Zend_Auth::getInstance();
$identity = new stdClass();
$identity->user_pk = $user->getPrimaryKey();
$identity->user_name = $user->getName();
$identity->role = $user->getRole(); // select * from user_role where user_pk=xxx
$auth->getStorage()->write($identity);
在控制器:
$acl->add(new Zend_Acl_Resource('news'))
->allow('defaultRole', 'news');
一切都在默認情況下拒絕,所以你並不真的需要指定:
->deny('defaultRole', 'news', 'add');
而且在控制器的代碼:
$identity = Zend_Auth::getInstance()->getIdentity();
if(!$acl->isAllowed($identity->role, 'news', 'add'))
{
header('Location: http://www.yoursite.com/error/unauthorized');
}
如果用戶的身份不被允許執行「news-> add」,它會將它們重定向到未經授權的頁面(假設您已經創建了這樣一個頁面)。
如果用戶具有> 1的角色,您將存儲角色數組作爲他們的身份。 然後你的支票會去是這樣的:
$identity = Zend_Auth::getInstance()->getIdentity();
$isAllowed = false;
foreach($identity->role as $role)
{
if($acl->isAllowed($role, 'news', 'add'))
{
$isAllowed = true;
}
}
if(!$isAllowed)
{ // if NO ROLES have access, redirect to unauthorized page
header('Location: http://www.yoursite.com/error/unauthorized');
}
希望有所幫助。
爲什麼這個答案實際上是一個問題? – coderama 2013-07-25 08:28:38