koti42 Test etmedim ama şöyle bir şey deneyebilirsiniz:
// Kullanıcı birden fazla role sahip ise tüm yetkileri derlemeniz lazım
if(!$request->user()->roles->flatMap->permissions->contains('name', 'edit-user')) {
return redirect()
->route('users.index')
->with('error', 'Bunun için yetkiniz yok!, Lütfen sistem yöneticisine başvurunuz!');
}
$user->name = $request->input('name');
$user->email = $request->input('email');
$user->save();
return redirect()
->route('users.index')
->with('success', 'Kayıt günceleme işlemi başarıyla tamamlandı!');
Ayrıca:
$roles = auth()->user()->roles()->first();
Scope içinde Request varsa kullanıcıya $request->user()
şeklinde ulaşın.
$role = Role::findOrFail($roles->id)->load('permissions');
Bu kullanımı sizde daha önce de gördüm. Bu yanlış, size daha önce de söyledim. Buradaki load yöntemi daha önce yüklenmiş bir modelin ilişkisini sonradan yüklemek için. Doğru kullanım şekli şöyle:
if($condition) {
$model->load('relation');
}
Yani daha önce yüklenmemiş bir ilişkiyi bir şarta göre sonradan dönen collection'a eklemek için kullanmanız lazım. Eğer şart yoksa, direkt ilişkiyi de alarak modeli istiyorsanız with kullanacaksınız. Eğer tek bir model yüklüyorsanız ve yüklediğiniz ilişki de nested değilse with kullanmanın da anlamı yok çünkü mecburen o bir sorgu atılacak. Ayrıca kullanmanız gerekirse load yerine loadMissing kullanın, zaten yüklenmiş ise ilişkiyi tekrar yüklemenizi engeller.
Request içerisinde content, headers, body... gibi kendine ait public değişkenler olduğu için isimden dolayı sizin değişkenlerle karışma riski var (forumda bir arkadaş $request->content kullandığı için işin içinden çıkamamıştı, yardımcı olduk), o yüzden $request->input('name');
şeklinde kullanın. Bu şekilde iki özelliği de elde etmiş oluyorsunuz:
// Gelen değişken array ise dot-nation dediğimiz yolla içerisindeki elemana nokta ile ulaşabilirsiniz.
$photo = $request->input('user.photo'); // <input name="user[photo]"/>
// Değişken null ise ikinci parametreyi kullanarak default bir değer verebilirsiniz.
$startsAt = $request->input('starts_at', now());
Rol yetki sistemi (RBAC) için tavsiye ettiğim paket:
https://github.com/spatie/laravel-permission