Laravel | SAAS Uygulama Geliştirme
Günümüzün popüler kelimelerinden birisi haline gelen, IAAS ve PAAS ların yazılımla birleşmesi sonucu ortaya çıkan SAAS çözümleriyle ilgili kısa bir bilgi verip Laravel üzerinde nasıl SAAS uygulama geliştirebiliriz detaylı olarak inceleyelim.
SAAS kısaca Software As A Service olarak kısaltılan ve türkçeye Hizmet Yazılımı olarak çevirdiğimiz, bugün Türkiyede Paraşüt, İdeasoft gibi sitelerin kullandığı Tek Yazılım – Yüzlerce Müşteri mantığıdır. Kısaca SAAS bir uygulamayı, yüzlerce müşteriye kiralama olayı olarak da tanımlayabiliriz.
Peki SAAS Uygulamalarının laravel tarafında nasıl kullanıyoruz?
Kurumsal anlamda geliştirdiğim birkaç projemi SAAS a çevirmek için açıkcası baya araştırma yapmıştım. Genelde ingilizce olarak Multi Tenant denilen bir çok yazı olsa da hatta paketler geliştirilmiş olsa da bu işin en mantıklı tarafı paketten uzak, kendi SAAS çözümünüze göre işi şekillendirmekte..
SAAS Genel mantığı olarak aynı tablo ve aynı uygulama üzerinde her kullanıcıya yeni bir uygulama sunma imkanı yaratmak olduğu için burada iş sunucu tarafında cloudlara, yazılım tarafında ise ön tanımlı Modellere düşüyor..
Sunucu tarafı için Mysql Tarafında geliştiriceksiniz veritabanınızı Google Cloud hizmetlerini tavsiye ediyorum. Google Cloud SQL üzerinden anlık olarak istediğiniz büyüklükte ve özel olarak optimize edilmiş Mysql sunucuları oluşturabilirsiniz. Hatta işleriniz büyüdüğünde Master to Slave yada diğer adıyla Okuma Kopyası veya Master To Master dediğimiz senkron tablolarla SQL tarafıyla çok uğraşmadan çözebilirsiniz.
Laravel tarafında ise açıkcası bir çok yazıda okusam da yapıcağımız iş 2 Farklı Model eventıyla bitiyor.
Peki nedir bu eventlar?
Sisteme kayıtlı kullanıcıya “sadece kendi içeriğini” yada birden fazla içeride uygulama oluşturmuş ise de sadece o uygulamayı getirmek için SQL tablolarımızda default gelen bir kaç veriye ihtiyacımız vardı. O zaman örnek bir basit düzeyde SAAS projesi ve alt yapısını hazırlayalım. İki farklı şekilde SAAS uygulaması oluşturabilirsiniz. 2.Seçenek daha çok projelerime uygun olduğu için onu biraz daha detaylı olarak anlatıcağım.
1- Bir kullanıcı birden fazla APP:
user – Üyeler Tablosu
app – Uygulamayı saklayacağımız tablo
User tablosunda oluşturacağımız id değeri aslında SAAS uygulaması için biçilmiş kaftan görevini üstlenecek.
APP tablosunda ise user_id yi de sütunlarımıza ekleyerek kullanıcıya birden fazla uygulama eklemeyi sağlamış olalım.
Bundaki sonra aşamada ise SAAS Uygulamamızın varsayılan Modellemelerine geçelim fakat bu sistemde Modellemelere geçerken ön tanımlı bir değer önemli. O da app_id olarak APP tablosunda oluşturduğumuz ID değeri.
Kısaca aşağıda gibi bir yapı oluşturduk diyelim. User tablosu APP ye, APP de diğer uygulama tablolarımıza bağlı.
Eğer sadece CRM tarzı bir uygulama yapıyorsanız Rotalarla uğraşmanıza gerek kalmıycak, fakat dışarıdan ziyaretçilerin girdiği bir SAAS Uygulaması yazıyorsanız Rotalar üzerinde de işlemler yapmamız gerekicektir.
SaaS Model Yapısı:
Kullanıcı girişi yapıldıktan sonra seçilen uygulama üzerinden istediğiniz veriyi o uygulamanın app_id si ile arkaplanda kayıt edebilirsiniz. Ve uygulama app_id si ile de rahatlıkla o uygulamaya ait verileri gösterebilirsiniz.
Bir App – Birden Fazla Kullanıcı Mantığı:
Yukarıdaki mantıkta ise bir uygulama ve bu uygulamaya ait kullanıcı mantığı söz konusu.
Yukarıdakiden farkı ise her kullanıcı bir uygulama id si taşıyor..
Örnek olarak: A Firmasını uygulama olarak eklediğimizde, A Firmasına birden fazla kullanıcı tanımlıyoruz. Tüm A Firması kullanıcıları sadece kendi firmalarının verilerini görebilecek şekilde bir modül tanımlayalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<?php namespace App\Model; use Illuminate\Database\Eloquent\SoftDeletes; use Sentry; use Illuminate\Database\Eloquent\Model; class Product extends Model { protected $table = 'product'; public static function boot() { parent::boot(); static::creating(function ($activity) { $uye = Sentry::getUser(); $activity->app_id = $uye->app_id ; }); } public function newQuery($excludeDeleted = true) { $uye = Sentry::getUser(); return parent::newQuery($excludeDeleted = true) ->where('app_id', '=', $uye->app_id); } } |
Yukarıdaki Model mantığı ise şu şekilde. (Sentry user paketi tanımlı olarak gösterdim)
- Giriş yapmış her kullanıcının bir uygulaması vardır.
- Uygulaması olan her kullanıcı sisteme veri eklemek istediğinde otomatik olarak save/create yapılan veriye ek olarak app_id değeri otomatik eklenir. (Boot Fonksiyonu)
- Giriş yapmış olan kullanıcı sadece o app_id deki verileri görebilir. (NewQuery fonksiyonu)
Bu aşamadan sonra sanki kişiye özel yazarmış gibi modellerinizi oluşturabilirsiniz.
Frontend yani ziyaretçi kısmında domain bazlı bir uygulama geliştiricekseniz de Laravel tarafında aynı uygulamanın birden fazla domainle çalışması için gerekli olan sunucu ayarlarını yaptıktan sonra (Sunucu tarafında gelen tüm domainleri uygulamaya gönderecek şekilde ayarlamanız yeterli.)
Bu aşamada ise yapmamız gereken mantık domain adresinin hangi uygulamaya ait olduğunu bulup, tüm modeller de newquery değerine onu göstermek olacaktır.
1 2 3 4 5 6 |
public function newQuery($excludeDeleted = true) { $url = request()->server->get('SERVER_NAME'); return parent::newQuery($excludeDeleted = true) ->where('app_domain', '=', $url); } |
$url değişkeni ise request üzerinden server_name ile uygulamaya hangi domainle geldiğinizi gösterecektir.
Kısacası Laravel için SAAS uygulama geliştirmekte sadece fazladan 2 sutun ve bir uygulama tablosu işinizi çözecektir. Newquery ile sistem üzerinde kullanacağınız tüm Elequentlere tek tek kullanıcı_id, app_id gibi değişkenler tanımlamanıza gerek kalmayacaktır.
Kullanıcıların ortak bir tablo kullanmasını istiyorsanız (Şehir,İlçe gibi) newquery ve boot kullanmadan direk olarak Normal model açmanız yeterlidir.
İyi çalışmalar 🙂
laravel multi tenant ,laravel saas ,laravel saas uygulama ,php saas ,saas nedir ,saas uygulama geliştirme
Bir Cevap Yazın