Aklıma takıldı da dostlar ondan sormak istedim. Policie ile yetkilendirme yapabiliyoruz sanırım. süper admin admin vs gibi bunun için spatie'nin de yetki yapmak için bir paketi var. Bu ikisi arasında bir fark var mı yoksa ikisinin de kullanım yerleri farklı mıdır ?
Laravel Policy Hakkında
- En İyi Yanıtkoti42 tarafından
koti42
Daha önce policy kullanmadım fakat spatie'nin paketini kullanıyorum.
Bu paketle admin, superadmin tarzında değil yetki tarzında işlemler yaptırıyorum.
Örn; gönderileri yönet, mesajları yönet gibi.
Bunun haricinde bir alt dal daha oluşturulabilir. Gönderileri görüntüle, düzenle, sil gibi ayrı yetkiler oluşturulabilir.
Bu sayede kullanıcı sadece seçtiğiniz işlemleri yapabilir.
Yetki oluşturma;
Rota üzerinde yetki kontrolü;
View üzerinde yetki kontrolü;
Kullanıcı oluşturulurken yetki tanımlaması;
User model içerisinde yetki kontrol methodu;
Yetki oluşturma örneği;
Kullanıcı oluşturulurken yetki seçimi;
Genel hatlarıyla sistem bu şekilde işliyor benim tasarladığım sistemde.
Daha gelişmiş hale de getirilebilir.
Policy'de aslında benzer şekilde çalışıyor ancak sanırım sadece var olan methodlara ekleniyor.
Yanlış biliyor da olabilirim. Bilgili birisi yazarsa sevinirim.
koti42 Policy dokümanında şöyle diyor:
Policies are classes that organize authorization logic around a particular model or resource. For example, if your application is a blog, you may have a App\Models\Post model and a corresponding App\Policies\PostPolicy to authorize user actions such as creating or updating posts.
https://laravel.com/docs/9.x/authorization#generating-policies
Yani Spatie'nin paketinden farkı, spesifik bir model ya da bir kaynağa erişim sınırlaması koyabilmeniz. Örneğin Post'u kim oluşturduysa o düzenleyebilsin gibi. Spatie'nin paketinde ise yapabileceğiniz Post'ları kim düzenleyebilsin kim düzenleyemesin.
Spatie Rol/Permission için ek bilgi yazayım istedim, sonradan okuyacaklar için yardımı olur umuduyla.
Öncelikle Spatie dokümanında şöyle der,
- roller permissionlara sahiptir.
- önerilen permission kontrol etmektir rol kontrolü önerilmemektedir.
Ekstra olarak;
Karmaşık Rol/Permission yapılarının olduğu durumlarda Route üzerinde gerekli kontrolleri yapmak zorlaşabiliyor. Hem bu durumlar için hemde extra güvenlik anlamında ilgili Controller constructer'da aşağıdaki gibi düzenleme yapılabilir.class PartnersController extends BaseController { function __construct() { $this->middleware('permission:partner-list|partner-create|partner-edit|partner-delete', ['only' => ['index', 'show']]); $this->middleware('permission:partner-create', ['only' => ['create', 'store']]); $this->middleware('permission:partner-edit', ['only' => ['edit', 'update']]); $this->middleware('permission:partner-delete', ['only' => ['destroy']]); $this->middleware('permission:partner-activate', ['only' => ['activate']]); $this->middleware('permission:partner-show', ['only' => ['show']]); $this->middleware('permission:partner-manage-cashier', ['only' => ['cashierUpdate']]); } public function show() { ... } public function create() { ... } public function activate() { ... } }
mgsmus Yani Spatie'nin paketinden farkı, spesifik bir model ya da bir kaynağa erişim sınırlaması koyabilmeniz. Örneğin Post'u kim oluşturduysa o düzenleyebilsin gibi. Spatie'nin paketinde ise yapabileceğiniz Post'ları kim düzenleyebilsin kim düzenleyemesin.
controllerda kullanıcının kendi postlarını return ediyorum ayrıca route üzerindede hem rol hemde izin kontrolü yapıyorum bu durumda policye gerek olurmu ?
tmm