2012-09-20 54 views
0

我試圖驗證屬於公司的用戶是否可以查看屬於公司的項目......換句話說,如果他們是員工,他們應該能夠查看公司的項目。Yii:正確使用授權層次

我試圖按照這裏提供的示例: http://www.yiiframework.com/doc/guide/1.1/en/topics.auth

這是我生成的代碼(運行一次):

$auth=Yii::app()->authManager; 
$auth->createOperation('viewItem','view an item'); 
$bizRule = 'return User::model()->findByPk(Yii::app()->user->getId())->company->id==$params["item"]->company->id'; 
$task=$auth->createTask('companyOwnedItem','view a company-owned item',$bizRule); 
$task->addChild('viewItem'); 

這是main.php代碼:

 'authManager'=>array(
     'class'=>'CDbAuthManager', 
     'connectionID'=>'db', 

這是在我的控制器中使用的授權片:

if (Yii::app()->user->checkAccess('companyOwnedItem',array('item'=>$item))) { 
    echo 'YES'; 
} else echo 'NO'; 

我總是在屏幕上顯示'NO'。

但是,如果我用這個代碼:

if (User::model()->findByPk(Yii::app()->user->getId())->company->id==$item->company->id) 

然後我得到 'YES' 在屏幕上。我在做什麼錯了,我如何使用Yii的內置authManager來使它工作?

回答

0

我結束了使用以下和它的工作:

在我的配置:

'authManager'=>array(
    'class'=>'CDbAuthManager', 
    'connectionID'=>'db', 
    'defaultRoles'=>array('authenticated'), 
    'showErrors'=>true, 
), 

我authManager代碼:

$auth=Yii::app()->authManager; 
    $bizRule = 'return User::model()->findByPk(Yii::app()->user->getId())->company->id==$params["item"]->company->id;'; 
    $auth->createOperation('companyOwnedItem','view a company-owned item',$bizRule); 
    $role = $auth->createRole('authenticated'); 
    $role->addChild('companyOwnedItem'); 

然後在我的控制器:

if (Yii::app()->user->checkAccess('companyOwnedItem',array('item'=>$item))) { 
    echo 'YES'; 
} else {echo 'NO';} 

它的工作現在!

1

最好的猜測是項目數組中的項目無法正常工作。您是否打開了您的身份驗證管理器的調試?忘記財產,但有一個在bizRule錯誤的情況下打開。

除此之外,它看起來是正確的。此外,在Yii 1.1.11之後的FYI,有一個$ param ['userId']選項,因此您不需要查找當前用戶的ID。

+0

這讓我更近了一步,在我的小卒結束時我錯過了一個分號。 '$ bizRule ='return User :: model() - > findByPk(Yii :: app() - > user-> getId()) - > company-> id == $ params [「item」] - > company- > id;';但它仍然沒有驗證。難道是我錯誤地定義了我的角色? – ews2001

+0

它運行eval()內部的結果,所以它可能值得設置一切,並檢查它的方式。或者,如果你有Xdebug和一個PHP調試器,那麼看看它們是如何設置/如何工作的,這很有幫助。我正在使用PhpStorm,它效果很好。 – acorncom

+0

你在我的authManager配置文件中添加'showErrors => true'的建議幫助我測試了bizRule的應用,但是我發佈了一個可行的解決方案。感謝您的建議。 – ews2001