我有一个扩展Catalyst 的 Sentinel包User
的模型。Role
如果我使用默认的递增主键,一切正常。当我将其更改为使用 UUID 时,它的行为很奇怪。一切都很好,除了一点点细节。
这是检查是否属于a的代码片段:User
Role
public function inRole($role)
{
if ($role instanceof RoleInterface) {
$roleId = $role->getRoleId();
}
foreach ($this->roles as $instance) {
if ($role instanceof RoleInterface) {
if ($instance->getRoleId() === $roleId) {
return true;
}
} else {
if ($instance->getRoleId() == $role || $instance->getRoleSlug() == $role) {
return true;
}
}
}
return false;
}
该代码的作用是:如果我通过Role
它的一个实例循环遍历所有用户的角色并检查它们中的任何一个是否与提供$role
的 id 匹配。
以下是$user->roles
( $this->roles
) 关系:
public function roles()
{
return $this->belongsToMany(static::$rolesModel, 'role_users', 'user_id', 'role_id')->withTimestamps();
}
$role->getRoleId()
正确返回 UUID :"8fbc99e2-3cbb-4e98-b0e3-4c88027d787f"
但是$instance->getRoleId()
return 8
,或者 UUID 的第一个数字字符是什么。如果第一个字符是字母,则返回0
。
我已经确认这$instance
确实是一个实例,RoleInterface
所以我认为它的行为应该与$role
.
我还添加public $incrementing = false
了两个模型。
我已经对所有被调用的供应商函数进行了几个检查点,但我无法弄清楚为什么会发生这种情况。
任何帮助是极大的赞赏。
我在他们的 GitHub 存储库上打开了一个新问题,所以这里是保持答案同步的链接:github.com/cartalyst/sentinel/issues/289(对不起,我不能发布超过 2 个链接)