Yii2 RBAC Redis - что не так? - PullRequest
       35

Yii2 RBAC Redis - что не так?

0 голосов
/ 25 февраля 2019

Я пытаюсь использовать RBAC в моем расширенном приложении Yii2 (установлено sweelix / yii2-redis-rbac и yiisoft / yii2-redis ).

  1. common / main.php:

    //....
    'components' => [
        'authManager' => [
            'class' => 'sweelix\rbac\redis\Manager',
            'db' => 'redis',
        ],
        // ...
    ],
    
  2. common / main-local.php:

    //....
    'components' => [
        'authManager' => [
            'class' => 'yii\redis\Connection',
            'hostname' => 'localhost',
            'port' => 6379,
            'database' => 1,
        ],
        // ...
    ],
    
  3. Давайте попробуем инициализировать (RbacController):

    public function actionInit()
    {
        $auth->removeAll();
        $user = $auth->createRole('user');
        $auth->add($user);
    
        $admin = $auth->createRole('admin');
        $auth->add($admin);
    
        $auth->addChild($admin, $user);
        $auth->assign($admin, 1); // 1 - is id of admin user on database }
    

php yii rbac/init return:

Error: Redis error: ERR wrong number of arguments for 'hget' command. Redis command was: HGET auth:mappings:rules 

Дамп объекта:

    $user = $auth->createRole('user');
    var_dump($user);die;

возвращает:

    object(yii\rbac\Role)#21 (7) {
      ["type"]=> int(1)
      ["name"]=> string(4) "user"
      ["description"]=> NULL
      ["ruleName"]=> NULL
      ["data"]=> NULL
      ["createdAt"]=> NULL
      ["updatedAt"]=> NULL
    }

sweelix \ rbac \ redisManager в строке 364 : если $ item-> ruleName равно null, мыесть ошибка ...

$ruleGuid = $this->db->executeCommand('HGET', [$this->getRuleMappingKey(), $item->ruleName]);

Версия:

Redis server v=3.2.6, "yiisoft/yii2": "~2.0.14", yiisoft/yii2-redis 2.0.8, PHP 7.0.33

1 Ответ

0 голосов
/ 26 февраля 2019

Я проверил это в других приложениях и средах и заметил, что он работает на версии "yiisoft/yii2-redis": "2.0.8" и на "yiisoft/yii2-redis": "2.0.9" выдает ошибку ( sweelix \ rbac \ redisManager в строке 364 : $ruleGuid = $this->db->executeCommand('HGET', [$this->getRuleMappingKey(), $item->ruleName]);).Если принудительно переключиться на версию пакета " 2.0.8 ", ошибка исчезнет.

...