yalcin assignRole HasRoles tratinden geliyor. Zor yolu, bu yöntemi User modeline taşıyıp çalışma şeklini değiştirmek. Bunu yaptığınızda şöyle bir şey olacak:
$user->assignRole('writer', [
'is_default' => true,
])
// ya da
$user->assignRole([
'admin',
'writer' => [
'is_default' => true,
]
])
Bir de ben örnekte vermedim ama bir rolü default yapmadan önce diğer mevcut rolleri varsa onların is_default değerini false yapmanız gerekiyor. Bu işi kolaylaştırmak için User modeline şöyle bir yöntem eklenebilir:
public function assignDefaultRole(Role|string|int $role): void
{
$role = match (true) {
$role instanceof Role => $role,
is_int($role) => Role::find($role),
is_string($role) => Role::findByName($role),
default => throw new InvalidArgumentException('Unsupported role'),
};
$this->roles()
->newPivotStatement()
->where('user_id', $this->id)
->update([
'is_default' => false,
]);
$user->assignRole($role);
$user->roles()
->updateExistingPivot($role, [
'is_default ' => true,
]);
}