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.requireApprovalaçı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_nameve şirket içi rollerini taşır. Şirket değiştirmek için refresh sırasındatenant_idgö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:otpgrant'ıyla yapılır. Client'ın grant listesineotpeklenir. Uygulama, kendine eklenebilir birrole(ö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çinLogsağlayıcısıyla gönderilir. SMTP parolası.env'de tutulur (Auth__Messaging__Smtp__Password).- SMS:
ISmsSenderarayü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.Pkcs10.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
TenantIdalı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) vedefaultSort. 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,minLengthvepatternkuralları oluşturma ve güncellemede denetlenir. externalRefs.x.nullableile 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.csiç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.yamlya daauth.yamldosyası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
sortByve 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ı
Logise Identity açılmaz. - Benzersiz index'ler:
EnsureCreatedbunları yalnızca yeni veritabanında oluşturur. Var olan bir veritabanına elle eklemeniz gerekir.
Yükseltme
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).