私はUser
とRole
のモデルをCatalyst's Sentinelに拡張しています。LaravelのEloquentメソッドgetKey()は、UUIDの最初の番号を返します
デフォルトの増分プライマリキーを使用するとすべて正常に動作します。 UUIDを使用するように変更すると変な動作をします。ちょっとしたこと以外はすべてうまく動作します。
はここUser
がRole
に属するか否かをチェックするためにcode snippetです:
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と一致します。 "8fbc99e2-3cbb-4e98-b0e3-4c88027d787f"
しかし$instance->getRoleId()
戻り8
、または任意のUUIDの最初の数字は次のとおりです。
public function roles()
{
return $this->belongsToMany(static::$rolesModel, 'role_users', 'user_id', 'role_id')->withTimestamps();
}
$role->getRoleId()
が正しくUUIDを返します。
はここ$user->roles
($this->roles
)の関係です。最初の文字がレターの場合、0
を返します。
私はが確かにRoleInterface
のインスタンスであることを確認しましたので、正確には$role
と同じように動作するはずです。
また、両方のモデルにpublic $incrementing = false
を追加しました。
私は、呼び出されたすべてのベンダー機能にいくつかのチェックポイントを作成しましたが、これがなぜ起こっているのかわかりません。
ご協力いただきまして誠にありがとうございます。
GitHubリポジトリに新しい問題が発生しましたので、回答を同期させるためのリンクがあります:github.com/cartalyst/sentinel/issues/289(申し訳ありませんが2つ以上のリンクを投稿できません)
この値を '$ casts'配列でint型にキャストしていますか? – user3158900
@ user3158900私はそうは思わない。そのアレイはどこにありますか?しかし、私がしたとしても、両方の呼び出しが同じものを返す必要はありませんか? – DanVeira
保護された$ keyType = '文字列'を設定していますか?モデルのプロパティは機能しますか? – scrubmx