И снова о RBAC

Всем привет! Чтото не хочет работать checkAccess(). Собственно мои действия были такие:

Создал роль user:



	public function actionCreateRoles()


	{


		// create user role


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


		$task = $auth->createTask('Comments','Комментарии');


		$comment_rule = 'return Yii::app()->user->id==$params["Comment"]->author;';


		$auth->createOperation('addComment','Добавить Комментарий');


		$auth->createOperation('editComment','Редактировать Комментарий',$comment_rule);


		$auth->createOperation('deleteComment','Удалить Комментарий',$comment_rule);





		$task->addChild('addComment');


		$task->addChild('editComment');


		$task->addChild('deleteComment');


				


		$role=$auth->createRole('user');


		$role->addChild('Comments');


	}


При регистрации пользователю присваиваюсь роль user:



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


						$__id = $u->find('username=:username',array(':username'=>$_POST['Register']['username']));


						$auth->assign('user',$__id->id);


Дальше пытаюсь проверить, есть у зарегистрированного и залогиненого пользователя доступ (делаю это в любом view, к примеру).



<?


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


{


    ?>


    доступ есть


    <?


}


?>


Только вот чтото не появляется эта желанная надпись "доступ есть". В чем была ошибка?

Вообще почему то не видит моих ролей  :-\ Создаю фильтр



	public function accessRules()


	{


	    return array(


	   array('allow', 


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


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


	      


	   ),


	   array('deny',  // deny all users


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


	   ),


	   );


	}

но к ф-ии Create он меня не допускает. Хотя в базе в таблице authassignment к id моего пользователя соотв. роль reader.

  1. таблицы для CDbAuthManager созданны?

  2. сам CDbAuthManager настроен?

  3. Воспользуйтесь  расширением SRBAC

Чтобы не плодить темы.

Помогите досканально понять  как  использовать  не только Роли, но  и Задачи с  Операциями?

Возможно я, что то упустил,  но я не понял по какому принципу  должны  создаваться  Tasks и Operations , как их использовать в  дальнейшем?

Может быть Operations  молжны быть одноименны с по второй части названия с  actions из контродллеров?

Проблема оказалась у меня в том, что в базе я присваивал к конкретной роли id пользователя, а у самого не настроена была ф-ия getId (т.е. возвращала по дефолту имя пользователя а не его id).

Quote

Чтобы не плодить темы.

Помогите досканально понять  как  использовать  не только Роли, но  и Задачи с  Операциями?

Возможно я, что то упустил,  но я не понял по какому принципу  должны  создаваться  Tasks и Operations , как их использовать в  дальнейшем?

Может быть Operations  молжны быть одноименны с по второй части названия с  actions из контродллеров?

Пользователям присваиются роли. Ролям присваиваются задачи. Задачам - операции. Такая иерархия удобна в том случии, что если например есть задача “Комментирование” у какой-либо роли , а у этой задачи есть три операции - “Создать”, “Редактировать свой комментарий” и “Удалить свой комментарий”, то достаточно проверить наличие задачи “Комментирование” у пользователя (а не каждой операции по отдельности), чтобы дать ему доступ отредактировать или удалить свой комментарий. Хотя особой разницы нет и вполне возможно обходиться вообще без тасков. Просто мне так удобнее и кажется более логичным :)

А как же тогда пример с о страницы  описания ?

Собственно архитектурных  противоречий в структуре таблиц  я не заметил чтобы не делать так:

Это кусок из примера

$auth->createOperation('readUser','read a user');


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


$role->addChild('readUser');

На самом деле роли, операции и задачи — это одно и то же. Разделение ввели исключительно, чтобы показать, как грамотней всё это использовать.