2011-04-09 48 views
0

我想在基於ZF的應用程序中授權。 在Kohana中,我可以製作類似於我的抽象控制器中的Zend的授權FW

public $auth; 
public $user; 
public function before() 
{ 
    parent::before(); 

    $this->auth = Auth::instance(); 
    $this->user = $this->auth->get_user(); 
    // $this->user is object if user was logged in or FALSE if not 
} 

如何在Zend中做同樣的事情?我已閱讀關於插件,並認爲這是我需要的,但沒有找到任何信息保存插件類文件,我應該在哪裏啓用它們?

回答

2

你也可以在ZF上做一些類似你在Kohana做的事情。我個人從來沒有使用過Kohana的,但我的東西是ZF的版本的例子是類似於:

// assuming IndexController 
class IndexController extends Zend_Controller_Action { 

    protected $_auth; 
    protected $_user; 

    // you could also use init() here. 
    public function preDispatch() { 
     $this->_auth = Zend_Auth::getInstance(); 
     $this->_user = $this->_auth->getIdentity(); 
    } 
} 

如果你想擁有它的抽象控制器,那麼你可以只創建一個(例如My_Controller_Action ),它擴展了Zend_Controller_Action。有了這個,IndexController只會擴展你的抽象控制器而不是Zend_Controller_Action。

+0

我知道我可以這樣做,但...我不確定這是Zend插件的「Zend style」原因...無論如何謝謝。 – Chvanikoff 2011-04-09 10:20:20

+0

@Chvanikoff。你可以使用插件,但有時簡單的解決方案是最好的。我會考慮在使用ACL時使用插件,但只有身份驗證才足夠。 – Marcin 2011-04-09 10:38:37

+0

其實插件的解決方案只是相同的:) Excelpt你註冊它使用'$ frontController-> registerPlugin(new My_Plugin_Auth())';) – 2011-04-09 20:59:41

0

嘿!這也很簡單。但是,如果你想獲得授權或處理新的授權?什麼都有,兩個都來了。第一處理授權與數據庫中的表中的證書:

$db = $this->getInvokeArg('bootstrap')->db; 
$auth = Zend_Auth::getInstance(); 

$authAdapter = new Zend_Auth_Adapter_DbTable($db); 
$authAdapter->setTableName('authLogin') 
    ->setIdentityColumn('username') 
    ->setCredentialColumn('password') 
    ->setIdentity($username) 
    ->setCredential($password); 

$result = $auth->authenticate($authAdapter); 

if ($result->isValid()) { 
    // Yeah, logged in. Do some stuff here... 
} 

這裏來檢查,如果用戶在當前登錄:

$auth = Zend_Auth::getInstance(); 

if ($auth->hasIdentity()) { 
    // User is logged in. Retrieve its identity 
    $username = $auth->getIdentity(); 
} 

希望這有助於...