Sistem Mimarisi
Bu sayfa, FeedbackPulse SaaS'ın nasıl inşa edildiğine derinlemesine bir bakış sunar. Mimariyi anlamak, sorunları gidermenize, platformu genişletmenize ve bilinçli dağıtım kararları almanıza yardımcı olur.
Teknoloji Yığını
| Katman | Teknoloji | Amaç |
|---|---|---|
| Arka Uç | Laravel 12 (PHP 8.4+) | Uygulama çerçevesi, yönlendirme, ORM, kuyruk |
| Veritabanı | MySQL 8.0+ / MariaDB 10.6+ | Kalıcı veri depolama |
| Ön Yüz | Blade + Alpine.js + Tailwind CSS | Reaktif bileşenlerle sunucu taraflı arayüz |
| Ödemeler | Stripe PHP SDK + PayPal REST API | Abonelik faturalandırması |
| YZ | OpenAI GPT API | Duygu analizi, otomatik etiketleme, yanıt önerileri |
| Kimlik Doğrulama | Laravel Socialite | Google ve GitHub OAuth |
| E-posta | Laravel Mail (SMTP) | İşlemsel e-postalar, özetler, raporlar |
| Gerçek Zamanlı | Server-Sent Events (SSE) | Canlı gönderim akışı |
| Görev Zamanlama | Laravel Scheduler (cron) | Özetler, deneme süresi sona ermesi, veri saklama |
Çok Kiracılı Model
FeedbackPulse tek veritabanı, paylaşılan şema çok kiracılı modelini kullanır. Bu şu anlama gelir:
- Bir veritabanı tüm kiracılara hizmet eder
- Her kiracıya özgü tablo bir
tenant_idsütununa sahiptir - Global bir kapsam (
TenantScope) tüm sorguları otomatik olarak geçerli kiracıya filtreler - Bir özellik (
BelongsToTenant) oluşturma sırasındatenant_id'yi otomatik doldurur ve kapsamı uygular
Kiracı Çözümleme Nasıl Çalışır
Bir istek geldiğinde ResolveTenant ara yazılımı, geçerli kiracıyı şu öncelik sırasına göre belirler:
- Alt etki alanı —
acme.yourdomain.com→ "acme" alt etki alanına sahip kiracıyı arar - Özel etki alanı —
feedback.acmecorp.com→tenant_domainstablosunda doğrulanmış etki alanını arar - Kimliği doğrulanmış kullanıcı — giriş yapmış kullanıcının
tenant_id'sine geri döner
Genel sayfalar için (örn. /wall/acme-corp), kiracı doğrudan denetleyicide URL slug'undan çözümlenir (ara yazılımı atlayarak).
Veri İzolasyonu
+------------------------------------------+
| Veritabanı |
| |
| products (tenant_id = 1) -> Acme data |
| products (tenant_id = 2) -> TechCorp |
| products (tenant_id = 3) -> E-Commerce |
| |
| TenantScope, Acme'nin YALNIZCA |
| tenant_id = 1 olan satırları |
| görmesini sağlar |
+------------------------------------------+
Güvenlik: Genel taraflı denetleyiciler kiracı kapsamını atlamak için
withoutGlobalScopes()kullanır, ardından kiracı kimliğine göre manuel olarak filtreler. Bu kasıtlıdır — genel sayfaların kimliği doğrulanmış bir oturum olmadan veri göstermesi gerekir.
Dizin Yapısı
feedbackpulse-saas/
+-- app/
| +-- Console/Commands/ # 7 artisan komutu (özetler, saklama, uyarılar)
| +-- Http/
| | +-- Controllers/
| | | +-- Admin/ # Süper yönetici panel denetleyicileri
| | | +-- Auth/ # Giriş, kayıt, 2FA, OAuth, kimliğe bürünme
| | | +-- Customer/ # Müşteri portalı
| | | +-- Public/ # Genel sayfalar (duvar, form, yol haritası, değişiklik günlüğü, hub)
| | | +-- Tenant/ # Kiracı dashboard denetleyicileri
| | | +-- Webhooks/ # Stripe ve PayPal webhook işleyicileri
| | +-- Middleware/ # 15 özel ara yazılım
| +-- Mail/ # 7 gönderilebilir sınıf
| +-- Models/ # 28 Eloquent modeli
| +-- Scopes/ # TenantScope (global sorgu kapsamı)
| +-- Services/ # İş mantığı (YZ, ödemeler, webhook'lar vb.)
| +-- Traits/ # BelongsToTenant özelliği
| +-- Providers/ # Servis sağlayıcılar
+-- config/ # 11 Laravel yapılandırma dosyası
+-- database/
| +-- migrations/ # 35+ geçiş dosyası
| +-- seeders/ # Demo veri tohumlayıcıları
+-- public/ # Web kökü (index.php, öğeler, depolama bağlantısı)
+-- resources/views/ # 86 Blade şablonu
| +-- admin/ # Süper yönetici görünümleri
| +-- auth/ # Kimlik doğrulama görünümleri (giriş, kayıt, 2FA)
| +-- tenant/ # Kiracı dashboard görünümleri
| +-- public/ # Genel sayfa görünümleri
| +-- emails/ # E-posta şablonları
| +-- layouts/ # Düzen şablonları (yönetici, kiracı, misafir, kurulum)
| +-- partials/ # Paylaşılan bileşenler (gezinti, meta, komut paleti)
| +-- install/ # Web yükleyici görünümleri
| +-- legal/ # Gizlilik, koşullar, çerezler sayfaları
| +-- errors/ # Hata sayfaları (403, 404, 419, 429, 500)
| +-- landing/ # Açılış sayfası kısmi görünümleri
+-- routes/
| +-- web.php # 416 satır web rotası
| +-- api.php # API v2 rotaları
+-- storage/ # Yüklemeler, önbellek, oturumlar, günlükler
+-- bootstrap/ # Çerçeve önyükleme dosyaları
Kullanıcı Rolleri
FeedbackPulse, users.role sütununda saklanan dört kullanıcı rolüne sahiptir:
| Rol | Erişim | Giriş URL'si |
|---|---|---|
superadmin | Tam platform kontrolü (/admin/*) | /login |
tenant_admin | Tam kiracı kontrolü (/dashboard, /settings/*) | /login |
tenant_staff | Sınırlı kiracı erişimi (faturalama yok, silme yok) | /login |
customer | Yalnızca müşteri portalı (/customer/dashboard) | /customer/login |
Rol Hiyerarşisi
superadmin
+-- Herhangi bir tenant_admin'in kimliğine bürünebilir
+-- tenant_admin
+-- tenant_staff davet edebilir
+-- Faturalama, ayarlar, ekip yönetebilir
+-- tenant_staff
+-- Gönderileri, kampanyaları yönetebilir
+-- customer
+-- Kendi geri bildirimlerini görebilir
İstek Yaşam Döngüsü
FeedbackPulse'a bir istek ulaştığında şunlar olur:
Tarayıcı İsteği
|
v
public/index.php
|
v
Laravel Kernel (ara yazılım yığını)
|
+-- EnsureInstalled -> Kurulum yoksa /install'a yönlendir
+-- SecurityHeaders -> HSTS, CSP, X-Frame-Options ekle
+-- VerifyCsrfToken -> CSRF token'ı kontrol et (webhook'lar hariç)
+-- ResolveTenant -> Geçerli kiracıyı belirle
+-- Authenticate -> Kullanıcının giriş yapıp yapmadığını kontrol et
+-- EnsureTenantAccess -> Kullanıcının kiracıya ait olduğunu doğrula
+-- EnsureTwoFactorVerified -> 2FA etkinse kontrol et
+-- CheckPlanLimit -> Plan özellik sınırlarını uygula
|
v
Denetleyici (isteği işler)
|
v
Blade Görünümü (HTML oluşturur)
|
v
Yanıt -> Tarayıcı
Veritabanı Mimarisi
Ana Tablolar
| Tablo | Satır Sayısı | Amaç |
|---|---|---|
tenants | Platform | Çok kiracılı hesaplar |
users | Platform | Tüm kullanıcı hesapları (tüm roller) |
plans | Platform | Abonelik planları |
platform_settings | Platform | Global anahtar-değer yapılandırması |
products | Kiracı | Geri bildirim ürünleri |
feedback_campaigns | Kiracı | Geri bildirim formu yapılandırmaları |
feedback_submissions | Kiracı | Bireysel geri bildirim girişleri |
feedback_tags | Kiracı | Etiketler (gönderimlerle çok-çok ilişki) |
roadmap_items | Kiracı | Yol haritası kanban öğeleri |
roadmap_votes | Kiracı | Yol haritası öğelerine anonim oylar |
feature_requests | Kiracı | Topluluk özellik önerileri |
changelog_entries | Kiracı | Ürün sürüm notları |
team_members | Kiracı | Ekip üyesi kayıtları |
team_invitations | Kiracı | Bekleyen davetler |
api_keys | Kiracı | API erişim anahtarları |
audit_logs | Platform | Eylem denetim izi |
notifications | Platform | Uygulama içi bildirimler |
payment_events | Platform | Stripe/PayPal webhook olayları |
webhook_logs | Kiracı | Giden webhook teslimat günlükleri |
data_deletion_requests | Kiracı | GDPR silme talepleri |
landing_pages | Platform | Açılış sayfası oluşturucu verisi |
tenant_domains | Kiracı | Özel etki alanı eşlemeleri |
referral_codes | Kiracı | Yönlendirme kodları |
referral_conversions | Platform | Yönlendirme dönüşüm takibi |
cron_logs | Platform | Zamanlanmış görev yürütme günlükleri |
Temel İndeksler
Tüm kiracıya özgü tablolar, optimum sorgu performansı için (tenant_id, created_at) üzerinde indekslenmiştir. feedback_submissions tablosunda status, product_id, campaign_id ve sentiment_label üzerinde ek indeksler bulunur.
Güvenlik Mimarisi
| Katman | Koruma |
|---|---|
| Aktarım | HTTPS zorunlu, HSTS başlıkları |
| Kimlik Doğrulama | Bcrypt (12 tur), isteğe bağlı 2FA (TOTP) |
| Yetkilendirme | Rol tabanlı ara yazılım + politika sınıfları |
| CSRF | Tüm formlarda Laravel CSRF token'ları |
| XSS | Blade otomatik kaçış ({{ }}) |
| SQL Enjeksiyonu | Eloquent parametreli sorgular |
| Hız Sınırlama | Rota başına kısıtlama (5-120 istek/dakika) |
| API Güvenliği | SHA256 karma API anahtarları, kiracı başına hız sınırları |
| Webhook Güvenliği | HMAC imza doğrulaması (Stripe), SSRF koruması |
| Veri | Hassas ayarlar dururken şifreli |
| Oturumlar | Şifreli, HTTP yalnızca, güvenli çerezler |
| Başlıklar | CSP, X-Frame-Options, X-Content-Type-Options |
Sonraki Adımlar
- Terimler Sözlüğü — terminolojiyi anlayın
- Kurulum Kılavuzu — sunucunuzu kurun
- Veritabanı Şeması — ayrıntılı tablo yapıları