Yii user-> checkAccess имеет значение false, когда auth является родительским

0

ПРИМЕЧАНИЕ. Я использую 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

  • 0
    Если вы отклоните сообщение, пожалуйста, дайте мне знать, что я делаю неправильно или почему вопрос глупый. Иначе я ничего не пойму
  • 0
    Как вы определяете детские роли?
Показать ещё 1 комментарий
Теги:
yii

1 ответ

1
Лучший ответ

Хорошо, мне удалось заставить работать мой код.

Я добавил 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')){
  • 0
    Я подожду, пока кто-нибудь ответит, прежде чем выбрать свой пост в качестве ответа, я был бы рад видеть, что на самом деле у вас могут быть только роли, а не задачи или операции.
  • 0
    Это ответ, выберите его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню