还是RBAC的问题。。怎么样能够灵活一点

不会每新增一个角色,我就在每个Controller里加上这个角色吗?

有没有好的方法呢?

角色和controller没关系啊

下面是controller裡的

public function accessRules()

{


	return array(


		array('allow',  // allow all users to perform 'list' and 'show' actions


			'actions'=>array('list','show'),


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


		),


		array('allow', // allow authenticated user to perform 'create' and 'update' actions


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


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


		),


		array('allow', // allow admin user to perform 'admin' and 'delete' actions


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


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


		),


		array('deny',  // deny all users


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


		),


	);


}

这是不是定义 角色是否可以访问 的吗?

users列的是用户id,不是角色。你可以用roles。

你可以考虑定义一个BaseController(所有的controller都继承它),然后把accessRules()定义在这个基类里。

我就是不知道这个accessRules 统一了怎么写哦。。

能给个例子吗?

可以指定某个Controller吗?

有的角色可以访问,有的角色是不能访问的。。。比如A,B两个控制器。。

admin角色可以访问全部,user角色只能访问 A。。

这样的规则怎么实现哦。。

可以,你可以在accessRules里设置controllers, actions参数。

好的,

public function accessRules()

    {

    /*

        * *: 任何用户,包括匿名和验证通过的用户。

  * ?: 匿名用户。

    * @: 验证通过的用户。

    */

        return array(

        	//拒绝访问,?

            array('deny',

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

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

            ),

            array('allow',

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

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

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

            ),

            array('deny',

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

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

            ),

        );

    }

controllers, actions参数加到哪哦。。。

QIANG这个controllers, actions参数加到哪哦。。。

每条rule里,就像users一样。

Quote

每条rule里,就像users一样。
return array(


              //拒绝访问,?


            array('deny',


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


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


'controller'=>array('site','default'),


'actions'=>array('create','update'),//这里怎么知道是谁的action呢?





            ),


强,这样吗?

第一次用RBAC,有点搞不懂 :)

对,是这样(你只应该有一个actions)。你这条规则只有符合下述所有条件才被执行:

  1. 用户是匿名用户

  2. 控制器ID是site或default

  3. action的ID是create或update

你可以用多条rule来做不同的匹配。

但是这样,怎么知道 create 是对应谁的呢?就是对应哪个controller呢?

这种情况是当然是对两个控制器都有效。

请问下,怎么样,只能一个控制器呢。。新手问题多撒。。

多谢

把你的rule拆开:



array('deny', 'controllers'=>array('site'), ...),


array('deny', 'controllers'=>array('default'), ...),


谢谢,明白 了。。。

测试成功