身份验证分配数据库调用yii2

时间:2017-06-08 22:29:37

标签: 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' => [
        'class' => 'yii\rbac\DbManager',
        'cache' => 'cache'
    ],

正如文档所说,将缓存身份验证分配(我正在使用Memcached)。但它似乎没有工作......

任何人都有任何想法?要么如何缓存它,要么为什么它被多次调用?

干杯

2 个答案:

答案 0 :(得分:0)

http://docs.telerik.com/devtools/nativescript-ui/api/classes/radlistview.html#scrolledevent

仅缓存auth_itemauth_ruleauth_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;
    }