Merhaba, Laravel Gate sınıfı bize uygulamalarımızda çeşitli yetkilendirme yapma olanağı sağlar. Laravel Gate, yetkilendirme işlemleri yapmanın sadece bir yoludur. Bunun için birçok paket ve yöntemler mevcut. Bu yazıda size çok hızlı ve basit bir şekilde Laravel Gate nedir, nasıl kullanılır onu anlatacağım.


Öncelikle sizde herhangi bir Laravel projesinin kurulu olduğunu varsayarak başlıyorum. Laravel Gate sınıfını kullanmak için herhangi ekstra bir komut girmeniz ya da paket yüklemenize gerek yoktur. Laravel'in içerisinde dahili olarak projenize ekli olarak gelir. Bir örnek üzerinden gidelim.


Örneğin sisteminizde iki farklı kullanıcı tipi mevcut, bunlardan birisi 'manager' diğeri ise 'user' olduğunu varsayalım. Sisteminizde de blog yazılarının olduğunu varsayalım. Şöyle bir durum istiyor olabilirsiniz. Örneğin kullanıcılar yazıyı listeleyebilir, detayını görebilir, düzenleyebilir ama silemez. Fakat 'manager' tipindeki kullanıcı bütün işlemleri yapabilir. Bu durumda ilk olarak Laravel Gate kullanırken, silme işlemi için bir aksiyon tanımlamamız gerekiyor. Burada genelde method tabanlı yetkilendirmeler yapılır. Siz bunu kendi ihtiyaçlarınıza göre farklı amaçlarla da kullanabilirsiniz. Şuanda şu şekilde iki işlem yapacağız.

1 - Aksiyonu tanımla (Burada diyeceğiz ki, xxx adını verdiğim işlemi xxx tipindeki kullanıcı gerçekleştirebilir.)

2 - Aksiyonun yapıldığı yerde izinleri kontrol et. (Burada da izni kontrol edeceğimiz method içerisinde aksiyonu tanımladığımız yerdeki ismi ve şuanki aktif olan kullanıcımız bu izne sahip mi bunu kontrol edeceğiz.)


Kısa bir açıklama yaptıktan sonra şimdi işlemlerimize başlayabiliriz. Biz yine blog yazısı silme örneğinden devam edelim. Öncelikle

App\Providers\AuthServiceProvider.php içerisine gidip boot() methodu içerisine şu şekilde iznimizi tanımlayalım

 Gate::define('delete-method', function ($user) {
    if($user->role == "manager") {
        return true;
    }else {
        return false;
    }
});

Burada aksiyonumuza bir isim tanımlamış olduk, artık bu tanımlamayı başka methodlar içerisinde kullanabiliriz. öncelikle Gate::define içerisindeki ilk parametremiz aksiyona verdiğimiz isim, ikinci parametremizdeki fonksiyon ise o aksiyonun hangi şartlar altında gerçekleşebileceği ya da engellenebileceği şeklinde. Burada gördüğünüz üzere varsayılan olarak $user değişkeninde giriş yapmış olan kullanıcıyı kullanabiliyorum. Ben verdiğimiz örnekte ise eğer kullanıcımın rolü manager ise şeklinde izin ver, yoksa izin verme şeklinde bir kullanım yaptım. Burada kendi projenizdeki ihtiyaçlara göre bunları şekillendirip genişletebilirsiniz.


Şimdi birinci işlemi yapıp aksiyon tanımlama işlemimi yaptım.. Şimdi bunun kontrolünü post sildiğim method içerisinde yapmam gerekiyor. (Yazıyı çok fazla uzatmamak adına, route ve viewları ekleme gereği duymadım eğer herhangi bir sorunuz olursa yorum olarak yazabilirsiniz.) Doğrudan methodmuza gidip ilk işlem olarak bu tanımlamış olduğumuz gate'i kullanalım.


public function destroy($id)
{
    if (!Gate::allows('delete-method')) {
        return "bu işlemi yapmaya yetkiniz yok";
    }else{
        return "bu işlemi yapmak için gerekli izniniz var.";
    }
} 

Burada gördüğünüz gibi Gate::allows('delete-method') şeklinde kullanarak işlem yaptım. allows bu yetkiye sahip olup olmadığını kontrol eder, eğer kullanıcının bu tanımlamış olduğumuz isimde (delete-method) üzerinde erişim hakkı varsa bu işlemleri yapar. Eğer yoksa yapmaz. İşte Gate sınıfının kullanımı bu kadar basit ve hızlı.


Gate sınıfının allows dışında çeşitli aksiyonlar için çeşitli methodları bulunmaktadır. Ben vermiş olduğum örnekte allows'u kullandım. Bunun dışında, allows'un tam tersi olarak denies şeklinde bir kullanımı da mevcuttur.


public function destroy($id)
{
    if (Gate::denies('delete-method')) {
        return "bu işlemi yapmaya yetkiniz yok";
    }
}

Bu işlemde de doğrudan kullanıcının buna izni yoksa bir işlem yapabilirsiniz.



Gate sınıfının birçok özelliği bulunmaktadır. Bu yazıda size en basit ve en hızlı şekilde Gate sınıfı nasıl kullanılır onu anlatmayı amaçladım. Siz de projenize ve ihtiyaçlarınıza göre Gate sınıfını kullanabilirsiniz. En güncel, en geniş ve en doğru Gate bilgilerini almak için Laravel'in kendi dökümantasyonuna bakıp, kendi projenize uygun versiyondaki özelliklerini görebilirsiniz.


Orijinal dökümantasyon adresi : https://laravel.com/docs/7.x/authorization


İyi çalışmalar kolay gelsin.