我試圖驗證屬於公司的用戶是否可以查看屬於公司的項目......換句話說,如果他們是員工,他們應該能夠查看公司的項目。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來使它工作?
這讓我更近了一步,在我的小卒結束時我錯過了一個分號。 '$ bizRule ='return User :: model() - > findByPk(Yii :: app() - > user-> getId()) - > company-> id == $ params [「item」] - > company- > id;';但它仍然沒有驗證。難道是我錯誤地定義了我的角色? – ews2001
它運行eval()內部的結果,所以它可能值得設置一切,並檢查它的方式。或者,如果你有Xdebug和一個PHP調試器,那麼看看它們是如何設置/如何工作的,這很有幫助。我正在使用PhpStorm,它效果很好。 – acorncom
你在我的authManager配置文件中添加'showErrors => true'的建議幫助我測試了bizRule的應用,但是我發佈了一個可行的解決方案。感謝您的建議。 – ews2001