/ / Chamada de banco de dados de atribuição de autenticação yii2 - php, yii, yii2, app-yii2-avançado, yii2-rbac

Chamada do banco de dados de atribuição de autenticação yii2 - php, yii, yii2, yii2-avançado-aplicativo, yii2-rbac

Eu estou usando o Yii2 e usando o yiirbacDbManager para atribuição de autenticação.

Eu estava olhando para os logs para ver onde todas as chamadas de banco de dados estão vindo e esta consulta

SELECT `b`.* FROM `auth_assignment` `a`, `auth_item` `b` WHERE
((`a`.`item_name`=`b`.`name`) AND (`a`.`user_id`="91")) AND (`b`.`type`=1)

Continua a correr de novo e de novo, por vezes 10/15 vezes em sucessão.

Eu adicionei

    "authManager" => [
"class" => "yiirbacDbManager",
"cache" => "cache"
],

Como dizem os documentos, o cache armazenará as atribuições de auth (estou usando o Memcached). Mas parece que não funciona ...

Alguem tem alguma idéia? Como armazenar em cache ou por que continua sendo chamado tantas vezes?

Felicidades

Respostas:

0 para resposta № 1

Adicionar cache em fornecedor / yiisoft / yii2 / rbac / DbManager.php (Também em todos os lugares você precisa de cache)

este código:

$ all_data = $ this-> db-> cache (uso da função ($ db) ($ query) { return $ query-> all ($ db); }, 360);


public function getAssignments($userId)
{
if (empty($userId)) {
return [];
}

$query = (new Query)
->from($this->assignmentTable)
->where(["user_id" => (string) $userId]);


$all_data = $this->db->cache(function ($db) use ($query) {
return $query->all($db);
},360);


$assignments = [];
foreach ($all_data as $row) {
$assignments[$row["item_name"]] = new Assignment([
"userId" => $row["user_id"],
"roleName" => $row["item_name"],
"createdAt" => $row["created_at"],
]);
}

return $assignments;
}

0 para resposta № 2

https://github.com/yiisoft/yii2/issues/3168

Apenas cache auth_item, auth_rule e auth_item_child dados. Todos estes os dados são armazenados em cache como uma única entrada no cache. Observe que auth_assignment é muito grande para ser armazenado em cache (imagine um sistema com milhões de usuários).