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



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

'user_models' => [
'users' => 'AppUser',
'modelAs' => 'AppModelA'
],

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

|user_id    |role_id    |user_type        |
|-----------|-----------|-----------------|
|3          |6          |AppUser         |
|3          |7          |AppUser         |
|3          |8          |AppModelA       |

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

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

任何帮助将不胜感激。

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

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返回正确的结果!

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

相关内容

  • 没有找到相关文章

最新更新