Php 身份验证分配数据库调用yii2
我正在使用Yii2并使用Php 身份验证分配数据库调用yii2,php,yii,yii2,yii2-advanced-app,yii2-rbac,Php,Yii,Yii2,Yii2 Advanced App,Yii2 Rbac,我正在使用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' =
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)。但它似乎不起作用
有人知道吗?要么是如何缓存它,要么是为什么它总是被调用这么多次
干杯
仅缓存auth_项
、auth_规则
和auth_项子项
数据。所有这些
数据作为缓存中的单个条目缓存。注意
auth_赋值
太大,无法缓存(想象一个系统
数百万用户)。添加缓存
vendor/yiisoft/yii2/rbac/DbManager.php
(也适用于所有需要缓存的位置)
此代码:
$all_data=$this->db->cache(函数($db)use($query){
返回$query->all($db);
},360);
确保缓存的应用程序组件ID是正确的(请仔细检查您是否真的将其称为“缓存”)。还请注意,yii\rbac\DbManager的缓存功能自版本2.0.3起就可用,因此请检查您的Yi2版本。
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;
}