我正在尝试在我的 Yii2 高级应用程序(sweelix/yii2-redis-rbac 和 yiisoft/yii2-redis 中使用 RBAC已安装)。
common/main.php:
//.... 'components' => [ 'authManager' => [ 'class' => 'sweelix\rbac\redis\Manager', 'db' => 'redis', ], // ... ],
common/main-local.php:
//.... 'components' => [ 'authManager' => [ 'class' => 'yii\redis\Connection', 'hostname' => 'localhost', 'port' => 6379, 'database' => 1, ], // ... ],
让我们尝试初始化 (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
返回:
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 服务器 v=3.2.6
,
"yiisoft/yii2": "~2.0.14"
,
yiisoft/yii2-redis 2.0.8
,
PHP 7.0.33
最佳答案
我在其他应用程序和环境中检查过它,发现它适用于版本 "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”版本,错误就会消失。
关于redis - Yii2 RBAC Redis - 怎么了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54868945/