Контроль доступа на основе ролей

Код работает отлично


if(Yii::app()->user->checkAccess('updateProfile', $user['id']))

{

    //Тут что-то

}

Как в методе Rules передать params?


	public function accessRules()

	{		

		return array(

			array('allow',

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

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

			),

			array('deny',

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

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

			),

		);

	}

Это контроллер профиля пользователя…право редактировать дается админу и пользователю профиля…


	'updateProfile' => array(

		'type' => 0,

		'description' => 'Редактирование профиля',

		'bizRule' => NULL,

		'data' => NULL,

	),

	

	'updateMyProfile' => array(

		'type' => 1,

		'description' => 'редактирование своего профиля',

		'bizRule' => 'return Yii::app()->user->id == $params;',

		'data' => NULL,

		'children' => array(

			0 => 'updateProfile',

		),

	),


	'administrator' => array(

		'type' => 2,

		'description' => 'Администратор',

		'bizRule' => NULL,

		'data' => NULL,

		'children' => array(

			'moderator',

			'updateProfile',

		),

	),

Как передать параметр в фильтре или может я пошел неправильным путем…?

В качестве второго параметра в checkAccess() передается массив. У вас вместо этого

А нужно

Также необходимо переделать bizRule следующим образом:

Та блин…я не об этом спрашивал…и вы не правы! Мне нужно передавать один параметр…зачем передавать массив? Yii все равно…


Yii::app()->user->checkAccess('updateProfile', $user['id'])


'bizRule' => 'return Yii::app()->user->id == $params;'

Код нормально работает. А я леньтяй, пусть это немного нарушает логику…просто писать меньше.

Как в методе accessRules() передать параметр…?

Я нашел частичные ответы… http://code.google.com/p/yii-user

to napeHeK

Ещё раз перечитайте пост. Попробуйте сделать, потом утверждайте, что

Чтобы понять что нужно передавать именно массив, посмотрите реализацию любого из AuthManager.

Вот Yii не всеравно, а вам я бы порекомендовал прочитать хотябы раздел документации по RBAC, чтобы увидеть что передается массив даже в элементарном случае. Вот так




'bizRule' => 'return Yii::app()->user->id == $params;'



не делают! Как делают я вам написал, смотрите в документации, если сомневаетесь. :rolleyes: Потом когда нужно будет передать 10 параметров в checkAccess при сложнейшей иерархии, таких вопросов уже возникать не будет.

Никак. CAccessFilter работает только для простейших случаев авторизации. Для более сложных используются непосредственные проверки в действиях.

Ладно, гляну реализацию…но…

Мы передаем переменную и если это массив, обращаемся как массив, если обычную переменную, то используем как переменную…

Блин это логика…я посмотрю обязательно <_<