2013-07-02 144 views
0

我一直在使用Yii幾個月,但它很棒,但是我在控制器中實現訪問規則時遇到問題,但很奇怪,只有在Production中。Yii - 訪問規則問題

首先,在組件裏我聲明瞭一個UserApplications類,其中我會去查看用戶是否有權限去某個頁面。這個類中

一種方法是例如:

class UserApplications extends CApplicationComponent{ 

public function userEmail($id){ 

    $included = ApplicationUser::model()->find('id_app=:id_app AND id_user=:id_user', array('id_app' => 5, 'id_util' => $id)); 

    if (isset($included)){ 
     return TRUE; 
    }else{ 
     return FALSE; 
    } 

} 
} 

這樣一來,我看到,如果用戶可以訪問電子郵件應用程序。如果記錄存在,則返回TRUE,否則返回FALSE。

然後在我的config-> main.php我:

'components'=>array(
    'user_apps'=>array('class'=>'UserApplications'), 

最後,在我的電子郵件控制器,我有這樣的:

public function accessRules() 
    { 
     return array(
      array('allow', 
        'actions'=>array('index', 'logout'), 
        'users'=>array('@'), 
        'expression'=>'Yii::app()->user_apps->userEmail('.Yii::app()->user->getId().')==TRUE', 
      ),    
      array('deny', 
        'users'=>array('*'), 
        'deniedCallback' => function() { 
         $this->redirect(array('/site/index'));        
        }, 
      ), 
     ); 
    } 

這個工作在發展。我點擊鏈接,如果我不被允許進入應用程序,我會被重定向到網站的索引。

但是,在生產中,我得到的只是一個HTTP 500內部服務器錯誤。它沒有幫助,使

defined('YII_DEBUG') or define('YII_DEBUG',true);

在index.php文件,因爲我仍然得到500錯誤的錯誤消息在所有。

就像我說的,在開發中,一切都很好。

任何想法爲什麼會有這種情況?訪問規則內部是否依賴於特定的PHP函數,這些函數只能在確定的PHP本身及更高版本上運行?警予的要求,只能說5.1及以上,和我的部署服務器是5.2.17(老了,我知道,他們的工作就可以了)

問候

回答

2

顯然,Anonymous功能僅在PHP 5.3面世。

將溶液:

return array(
     array('allow', 
       'actions'=>array('index', 'logout'), 
       'users'=>array('@'), 
       'expression'=>'Yii::app()->user_apps->userEmail('.Yii::app()->user->getId().')==TRUE', 
     ),    
     array('deny', // deny all users 
       'users'=>array('*'), 
       'deniedCallback' => array($this, 'redirecting'), 
     ), 
    ); 
} 

public function redirecting(){ 
    $this->redirect(array('/site/index')); 
} 

獎勵給用戶基思Yii Framework Forum

問候