iToverDose/Yazılım· 1 HAZIRAN 2026 · 16:05

Rails 7+ için modern bir çok kiracılı sistem alternatifi: rails-tenantify

Rails 7+ projelerinizde çoklu kiracılı sistemleri güvenle uygulamak artık çok daha kolay. rails-tenantify gem'i sayesinde veritabanı sorgularınız otomatik olarak kiracı bazında filtreleniyor ve arka plan görevlerinde kiracı kimliği korunuyor. İşte detaylar...

DEV Community3 dk okuma0 Yorumlar

Çok kiracılı (multi-tenant) bir SaaS uygulaması geliştirirken karşılaşılan en kritik sorunlardan biri, farklı kiracıların verilerinin birbirine karışmasını engellemektir. rails-tenantify, Ruby on Rails 7+ projelerinde satır düzeyinde çoklu kiracılığı güvenli ve basit bir şekilde uygulamaya olanak tanıyan modern bir çözüm sunuyor.

Neden Mevcut Çözümler Yeterince İyi Değil?

Çoğu Rails geliştiricisi, çok kiracılı sistemler için acts_as_tenant veya Apartment gibi kütüphaneleri kullanıyor. Ancak bu araçlar modern Rails uygulamalarında çeşitli sorunlara yol açabiliyor:

  • `acts_as_tenant`: Rails 7+ ile tam uyumlulukta sıkıntılar yaşanabiliyor, özellikle arka plan görevlerinde kiracı kimliğinin korunması zorlaşıyor.
  • Arka plan görevlerinde veri sızıntıları: Bir Sidekiq görevi yeniden denendiğinde kiracı kimliği kaybolabiliyor.
  • Ayrı veritabanı ya da şema kullanımı: Apartment gibi çözümler her kiracı için ayrı bir veritabanı ya da şema oluşturuyor. Bu da bakım maliyetini artırıyor ve yükseltmeleri karmaşıklaştırıyor.
  • Güvensiz toplu işlemler: update_all veya delete_all gibi toplu işlemler, yanlışlıkla tüm veritabanını etkileyebiliyor.

Bu sorunlar, çoğu B2B SaaS uygulaması için gereksiz karmaşıklık oluşturuyor. Aslında ihtiyaç sadece, veritabanında bir organization_id kolonu ekleyerek tüm sorguları otomatik olarak filtrelemek.

rails-tenantify Nasıl Çalışıyor?

rails-tenantify, Rails 7+ projelerinde satır düzeyinde çoklu kiracılığı destekleyen bir Ruby gem'i olarak geliştirildi. Temel özellikleri şunlar:

  • Tek bir veritabanı: Tüm kiracılar aynı veritabanını paylaşıyor, ancak veriler otomatik olarak kiracı bazında filtreleniyor.
  • Arka plan görevlerinde kiracı kimliğinin korunması: Sidekiq ve ActiveJob ile tam uyumluluk.
  • Toplu işlemlerde güvenlik: Yanlışlıkla tüm veritabanını etkileyen sorgular otomatik olarak engelleniyor.
  • Esnek kiracı çözümleme: Alt alan adı, API başlıkları veya manuel olarak kiracı belirlenebiliyor.

Temel Kullanım Örneği

Öncelikle gem'i Gemfile dosyanıza ekleyin:

gem "rails-tenantify", "~> 0.1.2", require: "rails-tenantify"

Ardından config/initializers/tenantify.rb dosyasında temel ayarları yapın:

Tenantify.configure do |config|
  config.tenant_model = "Organization"
  config.on_tenant_not_found = :raise
  config.audit_overrides = :log
end

Daha sonra, kiracı modelinize ait tenant_id kolonunu veri tabanınıza ekleyin. Örneğin, Organization modeli için:

rails generate migration AddTenantIdToProjects tenant_id:integer
rails db:migrate

Model Düzeyinde Kiracı Tanımlama

Proje modelinizde kiracı ilişkisini tanımlayın:

class Project < ApplicationRecord
  include Tenantify::Scoped
  belongs_to_tenant :organization
end

Bu sayede, tüm Project sorguları otomatik olarak organization_id kolonuna göre filtreleniyor.

Kontrolcülerde Kiracı Çözümleme

Uygulama kontrolcülerinde kiracıyı belirleyin. Örneğin, alt alan adına göre kiracı çözümlemesi:

class ApplicationController < ActionController::Base
  set_tenant_by :subdomain, exclude: %w[www admin]
end

Bu ayar, acme.uygulama.com gibi alt alan adlarından kiracıyı otomatik olarak belirliyor.

Arka Plan Görevlerinde Kiracı Korunması

Arka plan görevlerinde kiracı kimliği otomatik olarak korunuyor. Örneğin, bir ExportJob sınıfında:

class ExportJob < ApplicationJob
  def perform
    Project.find_each do |project|
      project.update!(exported: true)
    end
  end
end

Bu görev Sidekiq'e gönderildiğinde, kiracı kimliği otomatik olarak görev payload'ına ekleniyor.

Toplu İşlemlerde Güvenlik

Toplu işlemlerde yanlışlıkla tüm veritabanını etkilemekten kaçınmak için rails-tenantify otomatik koruma sağlıyor:

# Bu sorgular otomatik olarak hata fırlatıyor
Project.update_all(status: "archived")
Project.delete_all

# İstisnai durumlarda bypass yapılabiliyor
Tenantify.without_tenant do
  Project.update_all(status: "migrated")
end

Kiracı Değiştirme Kontrolleri

Kiracıyı değiştirirken oluşabilecek riskleri yönetmek için çeşitli seçenekler sunuluyor:

Tenantify.configure do |config|
  config.audit_overrides = :raise # Kiracı değiştirme girişimleri hata fırlatıyor
end

Tenantify.current_tenant = organization_a
Tenantify.current_tenant = organization_b # Hata fırlatır

Diğer Çözümlerle Karşılaştırma

| Özellik | acts_as_tenant | Apartment | rails-tenantify | |---------|---------------|-----------|-----------------| | Rails 7+ Uyumluluğu | Kısmen | Evet | Evet | | Alt Alan Adı Çözümlemesi | Manuel | Manuel | set_tenant_by :subdomain | | API Başlık Çözümlemesi | Manuel | Manuel | set_tenant_by :header | | Sidekiq desteği | Bilinen sorunlar | Evet | Tam destek | | Toplu İşlem Koruması | Güvensiz | Güvensiz | Güvenli | | Kiracı Değiştirme Denetimi | Yok | Yok | Seçenekler: log, raise, ignore | | Test Yardımcıları | Kısmen | Yok | Yerleşik yardımcı fonksiyonlar |

Kimler için Uygun?

rails-tenantify, aşağıdaki senaryolarda ideal bir çözüm sunuyor:

  • B2B SaaS uygulamaları: Tipik olarak bir veritabanı ve satır düzeyinde kiracı izolasyonuna ihtiyaç duyarlar.
  • Düşük bakım maliyeti: Ayrı veritabanı ya da şema kullanımına gerek kalmadan, basit ve güvenilir bir çözüm arıyorlar.
  • Arka plan görevlerinde güvenlik: Sidekiq ve ActiveJob gibi araçlarla tam uyumluluk gerekiyor.
  • Toplu işlemlerde hata önleme: Yanlışlıkla tüm veritabanını etkileyen sorgulardan kaçınmak istiyorlar.

Geleceğe Bakış

Çok kiracılı sistemler, modern web uygulamalarının vazgeçilmez bir parçası haline geldi. rails-tenantify, Rails 7+ projelerinde bu ihtiyacı güvenli, basit ve bakım dostu bir şekilde karşılıyor. Gelecekte, gem'in daha fazla kiracı çözümleme stratejisini desteklemesi ve performans optimizasyonlarıyla geliştirilmesi planlanıyor.

Eğer Rails 7+ projelerinizde çoklu kiracılı bir sistem kullanmayı düşünüyorsanız, rails-tenantify sizin için ideal bir çözüm olabilir. Geliştirici dostu API'si ve güvenlik odaklı tasarımıyla, çok kiracılı sistemleri karmaşadan kurtarıyor.

Yapay zeka özeti

Rails 7+ projelerinizde çoklu kiracılı sistemleri güvenle uygulamak için rails-tenantify gem'ini keşfedin. Satır düzeyinde kiracı izolasyonu, arka plan görevlerinde güvenlik ve toplu işlem koruması sunuyor.

Yorumlar

00
YORUM BIRAK
ID #IVQ8XM

0 / 1200 KARAKTER

İnsan doğrulaması

4 + 5 = ?

Editör onayı sonrası yayına girer

Moderasyon · Spam koruması aktif

Henüz onaylı yorum yok. İlk yorumu sen bırak.