Rbac Не Постежим, Пока

Перелопатил горы информации, но до конца понять не могу;

Есть такое в конфиге




		'user'=>array(

			'class' => 'WebUser',

			// enable cookie-based authentication

			'allowAutoLogin'=>true,

		),

        'authManager'=>array(

            'class'=>'CPhpAuthManager',

            'defaultRoles' => array('guest'),

        ),



вот такой экшен с инициализацией




	public function actionPrepare() {

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

		$auth->createOperation('createPost','создание записи');

		$auth->createOperation('createComment','создание комментария');

		$auth->createOperation('readPost','чтение записи');

		$auth->createOperation('readComment','чтение комментария');

		 

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

		$role->addChild('readPost');

		$role->addChild('readComment');

		 

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

		$role->addChild('guest');

		$role->addChild('createPost');

		$role->addChild('createComment');

		 

		$auth->assign('moderator', 1); // это как бы главный юзер, который все должен уметь. он есть в базе

		$auth->assign('guest', 2); // это обычный, тоже есть в базе

		$auth->save();


		echo 'done';

	}



табличка Users c полем role.

и вот такой фильтр




    public function filters() {

        return array(

            'accessControl',

        );

    }

 

 

    public function accessRules() {

        return array(

            array('deny',

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

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

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

            ),

            array('allow',

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

            ),

        );

    }




Вроде бы все ок, но есть одно не обычное поведение.

Юзер с ID=2 имеет полные права, а юзер с ID=1 имеет права гостя =)

где я свернул не туда ?

что самое интересное, вот так все ок




	public function actionPerms() {

		echo Yii::app()->user->checkAccess('createPost') ? 'can create' : 'oops';

	}



В такой момент я люблю лезть в исходники :lol:

Да зачем лезть? Тут и так понятно. Читаем сверху вниз.




array('deny', // запретить

    'actions' => array('add'), // добавлять

    'roles' => array('createPost'), // тому, кто может createPost

),

array('allow', // разрешить

    'users'=>array('*'), // всё всем остальным

),



Похоже надо местами поменять allow и deny.

да там и правила немного поменялись :)

как оказалось все на много проще.

посомтрел исходник и сразу понял что не хватает в конце deny

хоть и логика немного поменялась :)