ПРИМЕЧАНИЕ. Я использую Yii 1.1. В приложении я переключился на управление db auth для использования более сложной системы auth, но теперь я не понимаю, почему пользователь с родительской ролью не выполняет проверку дочерней роли.
if(Yii::app()->user->checkAccess('Administrator')){
это не работает для пользователя Superadmin
Я сам объясню:
У меня 3 роли: Normal, Administrator, Superadmin
Суперадмин имеет 2 ребенка, обычный и администратор, а администратор - 1, нормальный.
Очевидно, каждый родитель должен иметь возможность делать все, что может сделать его ребенок.
Здесь код из Useridentity, где я назначаю роль
...
$this->_id=$myUser->userid;
$this->setState('title', $myUser->access_level);
$auth=Yii::app()->authManager;
if(!$auth->isAssigned($myUser->access_level,$this->_id))
{
if($auth->assign($myUser->access_level,$this->_id))
{
Yii::app()->authManager->save();
}
}
В моей конфигурации:
'authManager'=>array(
'class'=>'CDbAuthManager',
'defaultRoles'=>array('Normal','Administrator','Superadmin'),
),
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ Содержимое таблицы автозапуска: имя_пользователя userid bizrule data
Administrator 1 NULL N;
Administrator 8 NULL N;
Normal 2 NULL N;
Superadmin 1 NULL N;
Это означает, что пользователь 1 имеет права администратора и суперадмина. Но checkAccess ('Administrator') по-прежнему возвращает FALSE
Хорошо, мне удалось заставить работать мой код.
Я добавил 3 задания с помощью правил NULL:
adminPermissions, superPermissions, normalPermissions
$task=$auth->createTask('adminPermissions','...description',NULL);
$task=$auth->createTask('superPermissions','...description',NULL);
$task=$auth->createTask('normalPermissions','...description',NULL);
а затем добавил их как дочерние роли. (поскольку правило NULL, оно никогда не возвращает TRUE, если не является дочерним чем-то).
Очевидно, что лучше создавать задачи и операции, такие как updatePost или deleteUser, но если вы начали, как я, с простых ролей, и вы использовали CPhpAuthManager, вы сможете перейти на CDbAuthManager, пока приложение уже готово, а позже вы можете создать ваши задачи и операции.
В моем приложении теперь я проверяю adminPermissions или superPermissions следующим образом:
if(Yii::app()->user->checkAccess('adminPermissions')){