BaseForge v0.6.3-beta
Bu bir güvenlik sürümü. Gerçek bir multi-tenant proje (ProKantar) 0.6.2 ile üretilirken üretilen kodda birkaç açık ortaya çıktı: kimlik doğrulamasız gRPC, iş akışına ait alanları ezebilen CRUD uçları, serbest sortBy, kaçışlanmayan arama ve varsayılan veritabanı şifreleri. Bu sürüm hepsini kapatıyor. Değişikliklerin çoğu varsayılan olarak açık; production'daki bir servisi yükseltmeden önce Kırıcı değişiklikler bölümünü okuyun.
Güvenlik
Kimlik doğrulamalı gRPC
authbloğu olan servislerde her gRPC ucu artık geçerli bir JWT istiyor (MapGrpcService<…>().RequireAuthorization()).- Üretilen gRPC client'lar kimliği kendiliğinden ekliyor (
AddBaseForgeCallCredentials):- HTTP isteği içinde çağıranın Bearer token'ı iletiliyor; çağrılan servis gerçek kullanıcıyı (roller,
tenant_id) görüyor; - arka plan kodunda (RabbitMQ tüketicileri, job'lar) Identity'den
client_credentialsservis token'ı alınıp önbellekte tutuluyor (IServiceTokenProvider).
- HTTP isteği içinde çağıranın Bearer token'ı iletiliyor; çağrılan servis gerçek kullanıcıyı (roller,
- Kiracı
x-tenant-idmetadata'sıyla taşınıyor ve yalnızca servis token'ıyla geldiğinde kabul ediliyor: Identity artık client-credentials token'larınabf_svcclaim'i basıyor. Kullanıcı başlık göndererek kiracı değiştiremez. - Yeni
TenantScope(BaseForge.Core.MultiTenancy): HTTP isteği dışında çalışan kod için ortam kiracısı.
Sunucunun yönettiği alanlar — serverManaged
status: { type: enum, values: [Open, Completed], serverManaged: true }
netKg: { type: decimal, nullable: true, serverManaged: true }Alan, üretilen Create/Update komutlarına girmiyor, DTO'da kalıyor. Onu yalnızca kendi komutlarınız (Custom/ altında) değiştiriyor; durum geçişleri ve hesaplanan toplamlar artık düz bir PUT ile yazılamıyor. Designer'da bunun için bir onay kutusu var.
Güvenli sıralama ve arama
sortByyalnızca bir izin listesindenAlan,Alan ascya daAlan desckabul ediyor (virgülle ayrılmış, en çok 5). Varsayılan liste tüm skaler alanlar artıCreatedAt/UpdatedAt; daraltmak içinsortFields: [...]verin. Dışındaki her şey 400 döner.GenericRepositorydeTenantId,IsDeletedveDeletedAtalanlarını kendi başına reddediyor.searchFields: [...]ilesearch'ün aradığı metin alanları sınırlanabiliyor (varsayılan: hepsi). Kimlik numarası gibi hassas alanları bu listeye koymayın.- Arama metnindeki
%,_ve\kaçışlanıyor. 2 karakterden kısa terimler yok sayılıyor.
Sayaç uçları
- Yeni erişim action'ı:
access: { counters: authenticated | [roller] }. Verilmezse sayaçlar eskisi gibi herkese açık kalıyor. increment-*uçları kullanıcı (ya da IP) başına dakikada 30 istekle sınırlı; 31. istek 429 alıyor.
Gizli bilgiler ve portlar
- Üretilen her servise (ve Identity'ye) rastgele 32 karakterlik
POSTGRES_PASSWORDiçeren bir.envile commit'lenen bir.env.exampleyazılıyor..envgitignore'lu ve Docker imajına girmiyor. appsettings.jsonartık şifre içermiyor.docker-compose.yml${POSTGRES_PASSWORD}okuyor ve değer yoksa başlamıyor. Yereldotnet run.env'i kendiliğinden yüklüyor.- Postgres yalnızca
127.0.0.1'de yayınlanıyor. Developmentdışında, veritabanı şifresi boş ya dachange_meolan servis açılmıyor.
Kırıcı değişiklikler
change_meile çalışan production: bağlantı cümlesi hâlâchange_me(ya da boş şifre) kullanan Development dışı bir servis açılmaz. Önce.env'e ya da ortama gerçek bir şifre verin.- Mevcut volume'lar korunur: 0.6.2 veya öncesiyle üretilmiş bir servis yeniden üretildiğinde
change_mealgılanıp.env'de tutulur; yerel veritabanları çalışmaya devam eder. Şifreyi bilinçli olarak değiştirin. sortBy:Alan [asc|desc]dışındaki ifadeler ya da izin listesinde olmayan alanlar artık çalıştırılmıyor, 400 dönüyor.- Arka plan gRPC çağrıları: bir tüketiciden ya da job'dan başka bir servisi çağırmak için
identity/auth.yaml'a gizli bir client ekleyin (clientId: {servis}-service,grants: [client_credentials],scopes: [api]) ve secret'ını çağıran servisin.env'ineAuth__ServiceClient__ClientSecretolarak yazın. Eklenmezse kullanıcı kaynaklı çağrılar çalışmaya devam eder, arka plan çağrıları 401 alır.
Yükseltme
dotnet tool update -g BaseForge.CodeGen --prerelease
baseforge update <servis> # spec yüklü Designer açılır → GenerateYeniden üretilen servisler BaseForge.* 0.6.3-beta paketlerini kullanır. Custom/ altındaki elle yazılmış koda dokunulmaz. Ayrıntılar mimari kararlarda (§5.1.1, §5.5, §6.2, §6.4, §6.5).
Sırada
Integration event'lerde ve tüketicide kiracı bilgisi, entity bazında tenantScoped, kiracıya duyarlı unique index'ler, Identity'de kiracı yönetimi, defaultSort ile aralık/IN filtreleri, PostGIS geometry tipi ve Designer korumaları (bayat form kontrolü, port çakışması).