I am using Laratrust to add roles to my User model. I want to add another table to use roles as well. I added modelAs to the config but Laratrust is confusing the two types. I get the roles from user with id[3] when querying modelA with id[3]. All I changed in the config was the user_models array like so:
'user_models' => [
'users' => 'App\User',
'modelAs' => 'App\ModelA'
],
I then added the modelA in role_users and set user_type to App\ModelA
|user_id |role_id |user_type |
|-----------|-----------|-----------------|
|3 |6 |App\User |
|3 |7 |App\User |
|3 |8 |App\ModelA |
Is the polymorphic relationship not supposed to know that I am not using the User model when I use the statement $modelA->roles?
I believe the problem has to do with caching the roles, because the key used to cache the roles in redis is laratrust_roles_for_user_3 which would the same for both variations of user_type. So the Cached values are overwritten? How am I supposed to work around that?
Any help would be appreciated.
I took a deeper look at how the package stores values in the cache. In the
LaratrustUserDefaultCheckerthe cache key is built up using$cacheKey = 'laratrust_roles_for_'.$this->userModelCacheKey() .'_'. $this->user->getKey();and theuserModelCacheKey()function is as follows:At the moment I am not using the
morph_mapsetting, thus the key will be the same for models with the same ID. This is the cause of the confusion. A quick test showed that if I set'use_morph_map' => truein the laratrust config and change theuser_typecolumn to match thekeyofuser_modelsthen there are two cache entries corresponding to my two models. And now->hasRolereturns the correct result!Note: I had to clear my cache before the test because it would show the wrong stored values.