Вызов базы данных Auth yii2

Я использую Yii2 и использую yii\rbac\DbManager для авторизации.

Я просматривал журналы, чтобы увидеть, откуда поступают все вызовы базы данных, и этот запрос

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

Продолжает бегать снова и снова, иногда 10/15 раз подряд.

я добавил

    'authManager' => [
'class' => 'yii\rbac\DbManager',
'cache' => 'cache'
],

Как говорят в документах, будет кешировать аутентификационные назначения (я использую Memcached). Но это не похоже на работу …

У кого-нибудь есть идеи? Либо как его кешировать, либо почему он так часто вызывается?

ура

0

Решение

Добавить кеширование в
продавец / yiisoft / yii2 / RBAC / DbManager.php
(Также во всех местах вам нужно кэширование)

этот код:

$ all_data = $ this-> db-> cache (функция ($ db) use ($ query) {
вернуть $ 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

Другие решения

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

Только кеш auth_item, auth_rule а также auth_item_child данные. Все эти
данные кэшируются как одна запись в кеше. Обратите внимание, что
auth_assignment слишком большой для кэширования (представьте систему с
миллионы пользователей).

0

По вопросам рекламы [email protected]