2012-04-10 24 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

相关问题