Skip to content

BaseForge v0.6.5-beta ​

Uçtan uca multi-tenant SaaS desteği. Identity artık şirketleri ve üyelikleri yönetiyor ve aktif şirketi token'a yazıyor. Kullanıcılar telefon koduyla giriş yapabiliyor, telefonlarını ve e-postalarını doğrulayabiliyor, SMTP üzerinden şifrelerini sıfırlayabiliyor. Olaylar kiracıyı tüketiciye taşıyor; üretilen listelere aralık ve çoklu değer filtreleri, benzersizlik kısıtları ve doğrulama kuralları geldi. Identity'nin tüm yeni özellikleri varsayılan olarak kapalı; mevcut auth.yaml dosyaları eskisi gibi çalışır.

Identity ​

Şirketler (multiTenancy) ​

  • Şirket açma: self-servis. Şirketi açan kişi şirketin yöneticisi (adminRole) olur. requireApproval açıksa şirket, bir platform rolü (approverRoles, örn. SuperAdmin) onaylayana kadar beklemede kalır. Platform rolleri şirketi askıya alıp yeniden açabilir.

  • Şirkete katılma: iki yol var.

    • Kişi şirket koduyla katılma isteği gönderir, şirket yöneticisi rol seçerek onaylar.
    • Şirket e-posta ya da telefonla davet eder, kişi kabul eder.

    Henüz hesabı olmayan birine gönderilen davet, o e-postayı ya da telefonu doğrulamış bir kullanıcı ortaya çıkana kadar bekler. Böylece kimse başkasının adresiyle kayıt olup daveti sahiplenemez.

  • Bir kişi, birden çok şirket: token, aktif şirketin tenant_id, tenant_name ve şirket içi rollerini taşır. Şirket değiştirmek için refresh sırasında tenant_id gönderilir; seçilen şirket sonraki refresh'lerde de korunur. Kullanıcı varsayılan şirketini belirleyebilir.

  • Kurallar:

    • Şirket içi roller (örn. TenantAdmin, Operator) yalnızca üyelikten gelir, asla global verilemez.
    • Şirketin son yöneticisi ayrılamaz ve rolü düşürülemez.
    • Askıya alınan şirket bir sonraki refresh'te token'dan düşer.
  • Şirket bilgileri: şirket yöneticisi şirketin adını ve vergi numarasını güncelleyebilir.

  • Mevcut veritabanları: var olan identity_db'ye yeni tablolar otomatik eklenir.

Tek kullanımlık kod (otp) ​

  • Telefonla giriş ve kayıt: urn:baseforge:grant-type:otp grant'ıyla yapılır. Client'ın grant listesine otp eklenir. Uygulama, kendine eklenebilir bir role (örn. Driver) gönderebilir.
  • Doğrulama: kullanıcı hesabındaki telefonu ve e-postayı doğrulayabilir; doğrulama yapıldığında bekleyen şirket davetleri hesaba bağlanır.
  • Kod güvenliği: kodlar hash'lenmiş olarak saklanır ve süreleri dolar. Deneme hakkı, yeniden gönderim beklemesi, saatlik sınır ve IP başına sınır vardır.
  • Yalnızca telefonla açılan hesap: hesabın e-postası olmayabilir; e-posta girilmişse yine benzersiz olmalıdır.

E-posta ve şifre sıfırlama ​

  • messaging: e-posta SMTP (Resend, Google Workspace, Brevo, SES…) ya da geliştirme için Log sağlayıcısıyla gönderilir. SMTP parolası .env'de tutulur (Auth__Messaging__Smtp__Password).
  • SMS: ISmsSender arayüzü hazır; şimdilik tek sağlayıcı Log.
  • passwordReset: şifremi unuttum akışı.
    • Yanıt her adres için aynıdır ve her adrese bekleme süresi içinde en fazla bir e-posta gider.
    • Bağlantı süreli bir token taşır.
    • Başarılı sıfırlamada e-posta doğrulanmış sayılır, hesap kilidi açılır ve kullanıcının tüm oturumları kapatılır.
  • registration.selfAssignableRoles: uygulamanın kayıt sırasında kullanıcıya verebileceği roller (POST /api/account/roles/{role}).
  • accessTokenLifetimeMinutes: access token'ın ömrünü belirler.

Düzeltmeler ​

  • Dış giriş kuralları tek yerde toplandı. Referans Razor giriş sayfası, kayıt kapalıyken hesap açabiliyor ve aynı e-postaya sahip parolalı bir hesaba otomatik bağlanabiliyordu. Bu sayfa üretilen servislerde yoktu.
  • Hata biçimi: /api/* hataları artık servislerle aynı ProblemDetails biçiminde dönüyor; tekrarlanan kayıt 409 döner.
  • Güvenlik: System.Security.Cryptography.Pkcs 10.0.14'e sabitlendi (OpenIddict açıklı 10.0.7 sürümünü getiriyordu).
  • Client ayarları: auth.yaml'a sonradan eklenen grant ve scope'lar artık var olan client'lara da yansıyor.

Servisler ​

  • Olaylarda kiracı: outbox zarfı olayı yayınlayan kiracıyı taşır ve tüketici her olayı o kiracının bağlamında işler. Multi-tenant servislerdeki handler'lar, kiracıyı elle taşımaya gerek kalmadan okuma ve yazma yapabilir.
  • Erken TenantId: yeni bir kiracılı kayıt, yalnızca SaveChanges sırasında değil, eklendiği anda TenantId alır.
  • auth.crossTenantRoles: bu rollerdeki ve token'ında kiracı olmayan kullanıcılar tüm kiracıların kayıtlarını okuyabilir. Bu yalnızca GET için geçerlidir; yazma işlemleri yine kiracı ister.
  • Açılışta RabbitMQ kapalıysa: servis çalışmaya devam eder ve bağlantıyı artan bekleme süreleriyle yeniden dener. Eskiden tüm servis duruyordu.
  • Liste filtreleri: rangeFilters (?xFrom=&xTo=), inFilters (?xIn=A&xIn=B) ve defaultSort.
  • unique: benzersiz olması gereken alan grupları. Multi-tenant serviste benzersizlik kiracı içinde aranır; silinmiş kayıtlar hesaba katılmaz.
  • Doğrulama: prop'lardaki min, max, minLength ve pattern kuralları oluşturma ve güncellemede denetlenir.
  • externalRefs.x.nullable ile başka bir servise verilen referans opsiyonel olur.
  • ProgramHooks.cs: kendi servis kayıtlarınızı, middleware'lerinizi ve RabbitMQ aboneliklerinizi (CRUD dışı olaylar dahil) Custom/ProgramHooks.Custom.cs içinde tanımlarsınız. Bunlar yeniden üretimde korunur.

Designer ​

  • Yeni alanlar: Identity panelinde şirketler, OTP, e-posta/SMTP, şifre sıfırlama, kendine eklenebilir roller ve token süresi ayarlanabiliyor. Entity'lerde aralık ve çoklu değer filtreleri, varsayılan sıralama, benzersiz alanlar, doğrulama kuralları ve opsiyonel dış referans var. Servis ayarlarında kiracılar arası okuma rolleri seçilebiliyor.
  • Bayat form koruması: sayfa açıldıktan sonra diskte değişen bir spec.yaml ya da auth.yaml dosyasının üzerine Generate artık sessizce yazmıyor; önce soruyor.
  • Port kontrolü: Generate, workspace'teki başka bir servisin kullandığı host portlarını reddediyor.

Kırıcı değişiklikler ​

  • sortBy ve yeni liste filtreleri: yeni anahtarları kullanmadıkça davranış değişmez.
  • Production'da OTP veya şifre sıfırlama: Development dışında OTP ya da şifre sıfırlama açıkken e-posta veya SMS sağlayıcısı Log ise Identity açılmaz.
  • Benzersiz index'ler: EnsureCreated bunları yalnızca yeni veritabanında oluşturur. Var olan bir veritabanına elle eklemeniz gerekir.

Yükseltme ​

bash
dotnet tool update -g BaseForge.CodeGen --prerelease
baseforge update <servis>   # spec yüklü Designer açılır → Generate
baseforge new-identity --spec identity/auth.yaml --output identity

Üretilen servisler BaseForge.* 0.6.5-beta paketlerini kullanır. Custom/ altındaki elle yazılmış koda dokunulmaz. Ayrıntılar mimari kararlarda (§5.2.1, §5.5, §6.2, §6.6, §6.7).

MIT Lisansı ile yayınlanmıştır.