如何使用authManager?

尽管http://dreamneverfall.cn/yiidoc/topics.auth.htm这个页面讲的也算是详尽了,但是还是不理解应该怎么使用authManager来实现用户权限管理?问题如下:

  1. 配置文件里的


'authManager'=>array(


   'class'=>'CDbAuthManager',


   'connectionID'=>'db',


),

没发觉这段中的CDbAuthManager起到了什么作用,本来的理解是用了CDbAuthManager加上别的配置,系统会自动根据数据库里表间的关联来判断能不能执行当前的controller,可实际上匹配规则还是得自己写,这样如果写成CPhpAuthManager会怎样?

  1. $bizRule=‘return Yii::app()->user->id==$params[“post”]->authID;’; 这里面可以写复杂的逻辑判断么?

  2. 定义授权等级这些代码应该是写在什么地方?例如这些:



$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');



if(Yii::app()->user->checkAccess('createPost'))


{


    // 创建发布


}

这段代码需要自己执行么?还是在定义



class PostController extends CController


{


    ......


    public function accessRules()


    {


        return array(


            array('deny',


                'actions'=>array('create', 'edit'),


                'users'=>array('?'),


            ),


            array('allow',


                'actions'=>array('delete'),


                'roles'=>array('admin'),


            ),


            array('deny',


                'actions'=>array('delete'),


                'users'=>array('*'),


            ),


        );


    }


}

时会自动被执行?

看完后发觉对authManager更迷糊了?哪位朋友能帮忙指点下迷津,或者给个实例看下,谢谢

同感啊!迫切求解?

1.CDbAuthManager,需要把framework/web/auth/schema.sql导入你的数据库

2.可以.只要确保一点,里面有$params这个变量即可,这个$params通常是数组,也可以是标量,例如$params==Yii::app()->user->id .另外, Yii::app()->user->checkAccess(‘createOwnPost’,“这里是实际传入$params的地方”)

3.你可以写在入口文件里,即index.php下,运行一次即可(然后注释掉,你懂的,若你用的是CPhpAuthManager,需要Yii::app()->authManager->save()保存,数据文件会保存在data/auth.php里面)!

4.if(Yii::app()->user->checkAccess(‘createPost’))在是否显示"创建按钮"的时候使用!后面的accessRules是你打开r=post/create的URL的时候执行的!

补充:

假定 $auth->assign(‘createPost’,1);

你可以让 Yii::app()->user->id=1

这样Yii::app()->user->checkAccess(‘createPost’))就会为真.

因为Yii::app()->user->checkAccess取的是Yii::app()->user->id和’createPost’去比较的.