2012-04-10 64 views
2

這是我在Yii框架手冊中找到的代碼:我應該在Yii框架中將角色代碼放在哪裏?

$auth=Yii::app()->authManager; 

$auth->createOperation('createPost','create a post'); 
$auth->createOperation('readPost','read a post'); 
$auth->createOperation('updatePost','update a post'); 
$auth->createOperation('deletePost','delete a post'); 

$bizRule='return Yii::app()->user->id==$params["post"]->authID;'; 
$task=$auth->createTask('updateOwnPost','update a post by author himself',$bizRule); 
$task->addChild('updatePost'); 

$role=$auth->createRole('reader'); 
$role->addChild('readPost'); 

$role=$auth->createRole('author'); 
$role->addChild('reader'); 
$role->addChild('createPost'); 
$role->addChild('updateOwnPost'); 

等。 問題是我應該在哪裏放置用於創建角色,任務等的代碼?

回答

1

你應該使用保護/控制器,該代碼/ RbacController.php

對矯正後保護/配置/ main.php

return array(
'components'=>array(
    'db'=>array(
     'class'=>'CDbConnection', 
     'connectionString'=>'sqlite:path/to/file.db', 
    ), 
    'authManager'=>array(
     'class'=>'CDbAuthManager', 
     'connectionID'=>'db', 
    ), 
), 
); 

這是官方文檔:

http://www.yiiframework.com/doc/guide/1.1/en/topics.auth#using-default-roles

+0

該文檔陳述「因此,我們只需要運行上面的代碼一次,而不是每個請求。「 - 我認爲一個單獨的控制檯命令可能是一個比控制器更好的地方(在控制器中的位置,你會建議把它放在哪裏?) – DCoder 2012-04-10 19:57:31

+0

在這個代碼的actionInit()中,然後運行init命令在同一個控制器的其他動作之前,我同意你這個單獨的控制檯命令可能是一個更好的地方,在這種情況下,看看這個擴展:http://www.yiiframework.com/extension/auth-init - 命令 – maxdangelo 2012-04-10 20:13:20

0

This p代碼將在數據庫中創建項目。你必須執行它。

您可以在其中一個控制器中創建一個動作,然後運行它。

本地主機/ myAppName/myController的/ myAction

或者你可以創建一個PHP文件中。然後將你的代碼粘貼到裏面並運行它。

1

這讓我花了一段時間才明白,所以讓我回答你的問題,因爲我明白yii的工作原理。

將首先創建下面的框架/網絡/ AUTH

您可以用phpmyadmin來填充數據庫

您還可以創建您將在其中運行的所有控制器中的SQL代碼的相應表上面的代碼。由於您只是填充數據庫,因此您只需運行一次數據庫

控制器可以調用myInitController.php並與其他控制器一起存儲。 控制器可以是簡單的

<?php 

class myInitController extends Controller 
{ 
    public function actionRun() 
    {  
     $auth=Yii::app()->authManager; 
     $auth->createOperation('createPost','create a post'); 

     echo "this is it"; 
    } 
} 

然後,你會前往www.yourwebsite.com/myInit/Run 驗證什麼得到了寫入到數據庫中運行它。不要將此控制器投入生產。你不希望別人運行命令。

那麼你的選擇是

  1. 手通過一些輸入數據,像phpMyAdmin
  2. 創建一個客戶控制器,它可以將所有的PHP命令並執行
  3. 使用GII創建模型和CRUD功能(小心複合主鍵)

我希望這有助於。

+0

正是我在找的東西。清晰。詳細。謝謝。 – MEM 2014-09-05 20:32:39