首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laratrust多态用户模型返回错误的角色

Laratrust多态用户模型返回错误的角色
EN

Stack Overflow用户
提问于 2020-09-29 20:31:34
回答 1查看 97关注 0票数 0

我正在使用Laratrust向我的User模型添加角色。我还想添加另一个表来使用角色。我将modelAs添加到配置中,但是Laratrust混淆了这两种类型。在使用id3查询modelA时,我使用id3从id3获取角色。我在配置中只更改了user_models数组,如下所示:

代码语言:javascript
复制
'user_models' => [
    'users' => 'App\User',
    'modelAs' => 'App\ModelA'
],

然后我在role_users中添加了modelA,并将user_type设置为App\ModelA

代码语言:javascript
复制
|user_id    |role_id    |user_type        |
|-----------|-----------|-----------------|
|3          |6          |App\User         |
|3          |7          |App\User         |
|3          |8          |App\ModelA       |

当我使用语句$modelA->roles时,多态关系不应该知道我没有使用User模型

我认为问题与缓存角色有关,因为在redis中用于缓存角色的键是laratrust_roles_for_user_3,这对于user_type的两种变体都是相同的。所以缓存值会被覆盖吗?我该怎么解决这个问题呢?

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2020-10-06 17:18:09

我深入研究了包是如何在缓存中存储值的。在LaratrustUserDefaultChecker中,使用$cacheKey = 'laratrust_roles_for_'.$this->userModelCacheKey() .'_'. $this->user->getKey();构建缓存键,userModelCacheKey()函数如下所示:

代码语言:javascript
复制
public function userModelCacheKey()
{
    if (!Config::get('laratrust.use_morph_map')) {
        return 'user';    // <-- this caused the confusion.
    }

    foreach (Config::get('laratrust.user_models') as $key => $model) {
        if ($this->user instanceof $model) {
            return $key;
        }
    }
}

目前我没有使用morph_map设置,因此对于具有相同ID的模型,密钥将是相同的。这就是造成混淆的原因。快速测试表明,如果我在laratrust配置中设置了'use_morph_map' => true,并更改了user_type列以匹配user_modelskey,那么就会有两个缓存条目对应于我的两个模型。现在->hasRole返回了正确的结果!

注意:我必须在测试前清除缓存,因为它会显示错误的存储值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64119688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档