Laravel Gates, kullanıcıların uygulamanızın belirli alanlarına erişmesine izin vermenize olanak tanır. Uygulamanızda kapıları kolayca tanımlayabilir ve ardından erişime izin vermek veya reddetmek için kullanabilirsiniz.

Gates olmadan erişim vermenin basit bir örneğiyle başlayalım ve sonra Gates'i bir alternatif olarak nasıl kullanabileceğimizi göreceksiniz.

Basit Örnek

Kullanıcı tablosunda, kullanıcının yönetici olup olmamasına bağlı olarak veya buna bağlı admin olarak adlandırılmış bir sütunumuz olduğunu varsayacağız . Aşağıdaki gibi basit bir  10 kontrolü yaparak uygulamamızın bir bölümünü kolayca koruyabiliriz:

Route::get('administration', function(){
    if(auth()->check() && auth()->user()->admin){
        echo 'Welcome to the admin section';
    } else {
        echo 'You shall not pass';
    }
});

Eğer admin satır ayarlanmış 1 belirli bir kullanıcı için, aşağıdaki çıktıyı göreceksiniz: 

Yönetici erişimi ekran görüntüsü

Aksi takdirde, aşağıdakileri görürler:

Yönetici erişimi reddetti

Uygulamamızdaki belirli bir bölüme erişime izin vermek veya erişimi reddetmek için basit bir yolumuz var. Ama sorun şu  ki, ya uygulamamızın her yerinde bu kontrollere sahipsek ve kullanıcı erişimini değiştirmek istiyorsak? Eğer böyle bir seçenekte kod tabanımızı araştırmalı ve bu kontrolü her yerde değiştirmeliyiz ki  buda çok verimli değildir.

Bunun yerine, bir geçit yada kapı dediğimiz Gate tanımlayabilir ve bunu uygulamamız boyunca kullanabiliriz.

Kapıları Tanımlama

Bir geçit tanımlamak için AppProvidersAuthServiceProvider.php dosyamızı açıp boot() methodumuza aşağıdakileri ekleyebiliriz :

public function boot()
{
    $this->registerPolicies();

    Gate::define('access-admin', function ($user) {
        return $user->admin;
    });
}

Bu Gate, uygulamamız boyunca yönetici kullanıcıları doğrulamak istediğimiz her yerde kullanabiliriz. Bir sonraki bölümde, bu yeni Gate'i nasıl kullanabileceğimizi göreceksiniz: 

Gates Kullanmak

Bir Geçit kullanmak için Gate::allows() veya şu şekilde bir Gate::denies() yöntem diyebiliriz :

Route::get('administration', function(){
    if (Gate::allows('access-admin')) {
        echo 'Welcome to the admin section';
    } else {
        echo 'You shall not pass';
    }
});

Bu gatesler ilgili harika olan şey, artık tanımımızı herhangi bir zamanda değiştirebilmemiz ve yetkilendirme mantığının tüm uygulamamız boyunca değişecek olmasıdır.

Gates'i kullanmanın bir başka nedeni de verilerle ilişkili izinleri kontrol etmektir. Örnek olarak bir blog kullanarak, kullanıcıların oluşturdukları gönderilerde düzenleme izinlerine izin verebiliriz.

Bir kullanıcının bir eylemi gerçekleştirme yetkisine sahip olup olmadığını kontrol etmek için verileri Gate'ye iletebiliriz.

Gate'ler ile ilgili olarak örnekleri çoğaltabiliriz ancak şimdilik bu temel bilgiler yeterli olacaktır. İlerleyen zamanlarda Gate ile daha fazla örnekler eklemeye gayret edeceğim.