2009-04-20 29 views
4

我想使用isAuthorized()方法來檢查管理標誌,但函數似乎永遠不會被調用。即使我將函數設置爲始終返回false,它也允許任何用戶。它看起來好像沒有被調用。cakephp isAuthorized()沒有被調用

我需要做更多的事情嗎?設置$ this-> Auth-> authorize ='controller'?

從/app/app_controller.php

class AppController extends Controller 
{ 

var $components = array('Auth'); 

function beforeFilter() 
{ 
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); 
    $this->Auth->loginRedirect = array('controller' => 'pages', 'display' => 'home'); 
    $this->Auth->logoutRedirect = '/'; 
    $this->Auth->authorize = 'controller'; 
    $this->Auth->userScope = array('User.active' => 1); 
} 

function isAuthorized() 
{ 
    if (strpos($this->action, "admin_") != false) 
    { 
     if ($this->Auth->user('isAdmin') == '0') 
     { 
      return false; 
     } 
    } 
    return true; 
} 
} 

回答

12

你應該檢查你是否覆蓋你的其他控制器的Auth設置。

首先,爲了驗證isAuthorized()正在被調用,請嘗試在其中放入一個簡單的debug($this); die;

如果它沒有死亡,你可能會在其他控制器中重寫它(你錯過了parent::isAuthorized()調用)。

如果不是這樣,那麼你可能會用beforeFilter()做同樣的事情。

+1

事實證明我重寫beforeFilter()而不是調用parent :: beforeFilter() – 2009-04-22 01:50:36

-4

你需要確保「驗證」是組件陣列對於控制器:

$this->components[] = 'Auth'; 

下降,在構造函數和它應該工作(當然,除非它不)。祝你好運!

+0

我忽略它從原來的職位,但在添加它我的編輯,它一直在那裏。 – 2009-04-20 15:58:08

1

附加博士漢尼拔的答案,還有一個可能的原因,如果你遇到此問題(像我一樣...):

如果控制器被命名爲tests_controller,的啓動方法Auth-Component在不啓動身份驗證的情況下中止(至少在cakePHP 1.3.10中 - 未檢查2.x)。所以,要確保你從來沒有命名控制器tests_controller ...從蛋糕\庫

摘錄\控制器\分量\ auth.php

function startup(&$controller) { 
    $isErrorOrTests = (
     strtolower($controller->name) == 'cakeerror' || 
     (strtolower($controller->name) == 'tests' && Configure::read() > 0) 
    ); 
    if ($isErrorOrTests) { 
     return true; 
    } 
... 
相關問題