我正在使用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 :(得分:0)
http://docs.telerik.com/devtools/nativescript-ui/api/classes/radlistview.html#scrolledevent
仅缓存auth_item
,auth_rule
和auth_item_child
数据。所有这些
数据缓存为缓存中的单个条目。注意
auth_assignment
太大而无法缓存(想象一个系统有
数百万用户。)
答案 1 :(得分:0)
添加缓存 供应商/ yiisoft / yii2 / RBAC / DbManager.php (在所有地方你都需要缓存)
此代码:
$ all_data = $ this-> db-> cache(function($ db)use($ 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;
}