у меня есть User
и Role
расширение модели Страж Катализатора пакет.
Все работает нормально, если я использую первичный ключ по умолчанию. Когда я изменяю его на использование UUID, это ведет себя странно. Все работает отлично, за исключением небольшой детализации.
Вот фрагмент кода проверить, является ли 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
Идентификатор
Вот $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()
возвращается 8
или каким бы ни был первый числовой символ UUID. Если первый символ представляет собой букву, он возвращает 0
,
Я подтвердил, что $instance
действительно является примером RoleInterface
поэтому я думаю, что он должен вести себя точно так же, как $role
,
Я также добавил public $incrementing = false
для обеих моделей.
Я сделал несколько контрольных точек во всех вызываемых функциях вендора, и я не могу понять, почему это происходит.
Любая помощь с благодарностью.
Я открыл новую проблему в их репозитории GitHub, так что вот ссылка для синхронизации ответов: github.com/cartalyst/sentinel/issues/289 (извините, я не могу опубликовать более 2 ссылок)
Это была ошибка в пакете, и она была исправлена: https://github.com/cartalyst/sentinel/commit/239fa9ec88ce8fb955f5c0d85311d55a2f76e314
Других решений пока нет …