2012-05-13 51 views
0

我有一個bug,實際上這是錯誤,這是通知,但仍然,我想修復它;zend框架中的訪問控制

當我嘗試訪問的頁面與null role,其顯示的信息:

Notice: Trying to get property of non-object in C:\Zend\Apache2\htdocs\hotelrwanda\application\plugin\AccessCheck.php on line 18

怎樣才能得到它固定在這裏是我的腳本:

public function preDispatch(Zend_Controller_Request_Abstract $request) { 

     $resource = $request->getControllerName(); 
     $action = $request->getActionName(); 

     $identity = $this->_auth->getStorage()->read(); 
     $role = $identity->role; 


     if(!$this->_acl->isAllowed($role, $resource, $action)){ 
      $request->setControllerName('users') 
        ->setActionName('login'); 
     } 
    } 

線:18此行:$role = $identity->role;

+0

它看起來像角色是無效的。你確定角色在Zend_Auth中被保存爲身份的一部分嗎?轉儲身份,看看有什麼。您可能沒有正確地將角色保存到會話中。要明白爲什麼該屬性無效,我們需要查看將身份保存到存儲的代碼。 – RockyFord

+0

不,我沒有添加任何東西,因爲基於教程我發現沒有這樣的事情。你能告訴我怎麼做 – Akram

+0

你真的把角色叫做'空'嗎?如果這樣改變它。否則你會遇到各種各樣的問題。 – vascowhite

回答

3
public function preDispatch(Zend_Controller_Request_Abstract $request) { 

      $resource = $request->getControllerName(); 
      $action = $request->getActionName(); 

      $role = 'guest'; //your default role 

     if(Zend_Auth::getInstance()->hasIdentity()) 
     { 
      $role = Zend_Auth::getInstance()->getIdentity()->role; 
     } 


      if(!$this->_acl->isAllowed($role, $resource, $action)){ 
       $request->setControllerName('users') 
         ->setActionName('login'); 
      } 
     } 

這裏'客'是作爲默認角色。您可以將其命名爲任何您喜歡的名稱,但一定要在您的acl中添加此角色並相應地授予此角色的權限。

+0

但是客人應該有空值,如果我宣佈客人,系統會要求我登錄 – Akram

+0

如何將客人定義爲空 – Akram

+0

系統只會要求您登錄時給定的資源不允許用於客人角色。你可以通過acl輕鬆管理。這裏角色來賓的行爲像空,但給你一個機會來定義沒有定義角色的訪問級別。 –