Laravel 5.5 Kullanıcı-Rol ilişkisi

Merhaba, bu yazıda popüler bir PHP frameworkü olan Laravelin barındırdığı Middleware özelliğini kullanarak Kullanıcı-Rol ilişkisi oluşturmaktan bahsedeceğim.
Lisans eğitimimin 3. senesinde aldığım “Veri tabanı sistemleri” dersi için bir proje geliştirmem gerekiyordu. Arkadaşımla beraber nasıl bir şey yapalım, ne kullanalım diye düşünürken bir otomasyon projesi geliştirmeye karar verdik. Backend kısmında RoR ve Laravel arasında gidip geldik ve Laravelde karar kıldık. Projenin içerisinde bir rol sistemi olması gerekiyordu. Her kullanıcının bir rolü olacak ve rol bilgisini programın çeşitli yerlerinde kullanacaktık. Bunu nasıl yapabilirim diye araştırırken Laravelin Middleware özelliğini keşfettim. Bir kaç deneme yaptım ve projeye uygun bir rol yapısı ekledim. Öncelikle middleware özelliğinden bahsedeceğim.

Laravel Middleware

Middlewarenin tanımı Laravel dökümanında şu şekilde yapılmış;

Middleware, uygulamanıza giren HTTP isteklerini filtrelemek için uygun bir mekanizma sağlar. Örneğin Laravel, uygulamanızın kullanıcısının kimlik doğrulamasını doğrulayan bir ara katmanı içeriyor. Kullanıcı kimliği doğrulanmazsa, katman kullanıcının oturum açma ekranına yönlendirecektir. Bununla birlikte, kullanıcı kimliği doğrulanırsa, ara katman, isteğin uygulamanın ilerleyişine izin vermesine izin verir.

Özetlemek gerekirse Middleware mekanizması HTTP isteklerini filtreleyebildiğimiz bir ara katmandır diyebiliriz. Bir çok frameworkde bu yapı bulunuyor. Middleware konusunu, yazının ilerleyen kısımlarında örnekler ile anlatmak üzere burada yarım bırakıyorum.

User ve Roles Tablosu

Bizim projede kullandığımız yapıda her kullanıcı bir role ait(belongsTo). Bu sebeple “roles” tablosu ile “users” tablosu arasında buna göre bir ilişki kurmamız gerekiyor. Aşağıda bu yapının kodlarına ulaşabilirsiniz.

Migrations


UsersTableMigration

Bu tabloda bulunan role_id alanı “Roles” tablosundaki “id” primary keyini işaret ediyor.

RolesTableMigration

readable_name fieldini ekleyip eklememek size kalmış. Biz o alanı kullanıcının rolünü View katmanında gösterdiğimiz için kullandık.

Models


App\User

App\Role

Middleware & Routing


Migrationları ve modelleri oluşturduktan sonra bir middleware oluşturmamız gerekiyor. İsterseniz laravelin içerisinde gelen Auth middlewaresini de kullanabilirsiniz, yeni bir tane oluşturmanıza gerek yok. Ben bu yazıda yeni bir tane oluşturacağım.

Middleware


Komutu ile “CheckRole” isminde app/Http/Middleware dizini altında yeni bir middleware oluşturduk. Bu middlewarei kullanarak kullanıcının gitmek istediği URL’e erişme yetkisinin olup olmadığını kontrol edeceğiz.

CheckRole

Kullanacağımız middlewarei oluşturduk. Şimdi Laravele, requesti filtrelemek için yeni bir middleware oluşturduğumuzu söylememiz gerekiyor. Bunun için /app/Http/Kernel.php dosyasına, oluşturmuş olduğumuz middlewarenin etiketiyle birlikte ekleme yapacağız.

Kernel.php

Ben etiket olarak “role” kelimesini seçtim. İstediğiniz değeri yazabilirsiniz. Etiketi middlewarei çağırmak için kullanacağız.

Routing


Gerekli her şeyi oluşturduk. Şimdi sıra oluşturduğumuz middlewarei kullamaya geldi. Burada örnek bir kaç senaryodan bahsedeyim.

  • /admin/* şeklinde bir route tanımınız var ve buraya sadece rolü “admin” olan kullanıcıların erişebilmesini istiyorsunuz.
  • /exam/list route tanımınıza sadece “teacher” rolündeki kullanıcıların erişmesini istiyorsunuz.

Örnek routes/web.php dosyası;

middleware metodunun kullanımı şu şekilde;

->middleware(middleware etiket adı:middlewareye gönderilecek parametre değeri)

Sırasıyla;

  1. Kullanıcı /admin sayfasına ulaşmak için istek gönderir.
  2. Laravel bu isteği filtrelemek için bizim yazmış olduğumuz CheckRole middlewaresini katman olarak araya sokar.
  3. CheckRole sınıfının handle metodu ‘admin’ parametresi ile çağrılır.
  4. CheckRole sınıfı User modelinin hasRole metodunu ‘admin’ parametresi ile çağırır.
  5. Kullanıcıya response döner.

Umarım faydalı olmuştur. İyi günler.

Yorum bırak

Email adresiniz yayınlanmayacaktır.İşaretli alanları doldurmak zorunludur *