2

我有一个扩展Catalyst 的 SentinelUser的模型。Role

如果我使用默认的递增主键,一切正常。当我将其更改为使用 UUID 时,它的行为很奇怪。一切都很好,除了一点点细节。

这是检查是否属于a的代码片段UserRole

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 个链接)

4

2 回答 2

1

这是包中的一个错误,已修复:https ://github.com/cartalyst/sentinel/commit/239fa9ec88ce8fb955f5c0d85311d55a2f76e314

于 2016-11-12T14:35:34.013 回答
0

此错误已修复,但如果您有非常旧的 laravel 版本,它帮助我将此代码添加到模型中

public function getKeyName() {
    if (isset($this->id)) {
        return 'id_'; // any non-existed column  
    } else {
        return 'id'; // real id column name 
    }
}

public function getKey() {
    return $this->id;
}
于 2021-09-24T10:35:56.713 回答