Skip to content

Releases: DropDeart/BaseForge

v0.6.2-beta: Merge pull request #3 from DropDeart/release/0.6.2-beta

Choose a tag to compare

@DropDeart DropDeart released this 27 Sep 14:59
8b90833
chore(release): version 0.6.2-beta (English/Turkish Designer, English…

v0.6.0-beta

Choose a tag to compare

@DropDeart DropDeart released this 26 Sep 15:01

BaseForge v0.6.0-beta

Bu sürümün ana konuları yetkilendirme ve spec ifade gücü (enum, filtreler, görünürlük, opsiyonel ilişkiler): şimdiye kadar üretilen servisler yalnızca "giriş yapmış mı?" sorusunu soruyordu; artık rol ve kayıt sahipliği spec'ten, Designer'dan tanımlanabiliyor. Ayrıca HekimBurada ve diğer projelerde canlıda bulunup elle yamanan hataların tamamı generator'a taşındı.

Yükseltme notu: Generator ve kütüphane birlikte yükseltilmeli — üretilen kod BaseForge.API 0.6.0-beta'daki yeni BaseController yardımcılarını kullanır. Bkz. Kırıcı değişiklikler.

Yeni özellikler

Rol ve sahiplik tabanlı yetkilendirme (access / ownerField)

Ayrıntı ve gerekçeler: docs/ARCH.md §6.1.

auth:
  defaultAccess: authenticated   # belirtilmeyen action'lar (varsayılan)
  superRoles: [SuperAdmin]       # her kuralı otomatik geçer (SaaS platform sahibi)
entities:
  Order:
    ownerField: BuyerId
    access:
      list: [Admin, owner]       # Admin hepsini, diğerleri yalnızca kendi kayıtlarını görür
      create: authenticated
      update: [owner]
      delete: [Admin]
  • Action başına anonymous, authenticated veya rol listesi; listede owner kaydın sahibini ekler.
  • ownerField create'te token'dan damgalanır (istemcinin gönderdiği değer yok sayılır), update'te değiştirilemez.
  • Sahibi olmayan: update/delete → 403, başkasının kaydı getById → 404 (varlığı sızdırılmaz), list → yalnızca kendi kayıtları.
  • Görsel yükleme (/api/media) servisin varsayılan kuralını izler.
  • Kural controller'da hesaplanır, handler'da uygulanır; gRPC'nin kullanıcı bağlamsız servisler arası okumaları etkilenmez.
  • anonymousActions geriye dönük olarak çalışmaya devam eder. access kullanmayan mevcut spec'ler birebir aynı kodu üretir.
  • Servis spec'inde kullanılan bir rol Identity'de tanımlı değilse (yazım hatası) üretim sırasında uyarı verilir.

Identity: roller ve kayıt ayarı

roles: [Editor, SuperAdmin]   # Admin ve User her zaman var
registration:
  enabled: false              # varsayılan: KAPALI
  defaultRole: User
  • Kayıt kapalıyken /api/account/register 404 döner ve dış sağlayıcıyla (Google vb.) ilk kez gelen kullanıcıya da hesap açılmaz.
  • Admin paneli tanımlanan tüm rolleri atayabilir (önceden yalnızca Admin/User).
  • Giriş ekranı kayıt kapalıyken "Kayıt ol" bağlantısını gizler.

Identity: kullanıcı profil alanları (userProfile)

userProfile:
  props:
    Specialty: string
    DiplomaNo: { type: string, nullable: true, maxLength: 32 }
    VerificationStatus: { type: enum, values: [Pending, Approved, Rejected], default: Pending, editableBy: admin, inToken: true }
  • Alanlar ayrı bir tablo yerine doğrudan kullanıcıya (ApplicationUser) eklenir; tanım servis props'uyla aynıdır (enum, nullable, maxLength, default).
  • editableBy: self (varsayılan) → kullanıcı profil sayfasından düzenler; admin → yalnızca admin paneli. inToken: true → alan JWT claim'i olur.
  • /api/account/me ve admin kullanıcı listesi profile döner; PUT /api/account/profile (self alanlar) ve PUT /api/admin/users/{id}/profile (hepsi) tipine göre doğrular. Giriş SPA'sında profil ve admin formları otomatik çizilir.
  • user.proto artık auth.yaml'dan üretilir; identity/User dış referansı olan servisler aynı workspace'teki auth.yaml'ı okuyup profil alanlarını UserReference'ta alır.
  • Mevcut bir Identity veritabanına sonradan eklenen alanların kolonları açılışta oluşturulur (ADD COLUMN IF NOT EXISTS).
  • Önceden: HekimBurada'da yan tablo (DoctorProfile) + elle düzenlenmiş proto. Bkz. docs/ARCH.md §6.3.

Enum alan tipi

Status:
  type: enum
  values: [Draft, Pending, Active, Sold]
  default: Draft
  • Kodda gerçek C# enum (ListingStatus) — elle yazılan kodda tip güvenli karşılaştırma.
  • Veritabanında ve JSON'da (API + RabbitMQ olayları) değer adıyla string olarak saklanır; değer eklenip sıra değişse de eski kayıtlar bozulmaz.
  • Sayısal değerler reddedilir (BaseForge.Core.Serialization.StrictStringEnumConverter) — standart dönüştürücü tanımsız 99'u kabul edip DB'ye yazıyordu.

Liste filtreleri ve okuma görünürlüğü

Post:
  filterable: [Status, AuthorId]      # ?status=Live&authorId=...
  readFilter:
    where: { IsPublished: true }      # herkes yalnızca yayındakileri görür
    bypassRoles: [Admin]
    bypassOwner: true                 # yazar kendi taslaklarını da görür
  • Filtreler prop'lar, ilişki FK'leri ve dış referanslar için eşitlik filtresi üretir.
  • readFilter list ve getById'ye uygulanır (görünmeyen kayıt 404). gRPC servisler arası okumalar etkilenmez. Bkz. docs/ARCH.md §6.2.

Opsiyonel ilişkiler

relations altında nullable: true → FK Guid?; üst kategorisi olmayan kök kategori gibi hedefsiz kayıtlar artık oluşturulabilir (önceden FK ihlali).

Workspace'e Loki + Grafana

İlk üretimde workspace köküne observability/ eklenir: Loki, Grafana, hazır veri kaynağı ve "BaseForge - Servis Logları" dashboard'u (rastgele admin parolası .env'de). Önceden kullanıcının workspace'inde çalışan bir Loki yoktu ve loglar sessizce yalnızca konsola düşüyordu.

Designer

  • Enum değer listesi, opsiyonel ilişki kutusu, liste filtreleri ve görünürlük filtresi bölümleri.
  • Servis ayarlarında varsayılan erişim ve süper roller; entity editöründe sahip alanı ve action başına erişim tablosu; Identity panelinde roller, kayıt aç/kapa ve profil alanları.
  • Loglamanın nereye gittiği (Loki/Grafana) servis ayarlarında açıklanıyor.
  • baseforge new|update <servis> --no-browser: tarayıcıyı otomatik açmadan başlatır.

Önceki beta'dan beri eklenenler

  • API Gateway (YARP) üretimi, Sign in with Apple sağlayıcısı, UI Designer altyapısı, yerel CLI güncelleme script'i.

Hata düzeltmeleri

Alan Sorun Etki
API / gRPC CorrelationIdClientInterceptor DI'a kaydedilmiyordu Build başarılı, ilk gerçek gRPC çağrısında çökme. Artık AddBaseForge kaydediyor — mevcut projeler paket güncellemesiyle düzelir
Gateway PathPattern dönüşümü /'ı kodluyordu /api/gateway/x/Listings/{id} gibi çok parçalı yollar 404
Identity Secret'lar auth.yaml kopyasına, imza sertifikası parolası appsettings.json'a yazılıyordu Commit edilen dosyalarda parola/secret. Artık yalnızca .env; boş bırakılan secret'lar .env'den geri yüklenir (CLI ve Designer)
Identity Dış giriş, e-postası eşleşen parolalı hesaba otomatik bağlanıyordu E-postayı doğrulamayan sağlayıcılar üzerinden hesap ele geçirme riski. Parolasız (admin'in eklediği) hesaplar bağlanmaya devam eder
Codegen Şema yalnızca Development'ta oluşturuluyordu Production'da tablolar hiç oluşmuyordu
Codegen jwt.Authority koda gömülüydü Artık Auth:Authority ile ezilebilir
API Authority modunda yedek issuer yoktu Identity yeniden başlarken IDX10204 ile toplu 401. Auth:Issuer verilirse yedek geçerli issuer olur
API İstek logu istisnadan önce yazılıyordu Hatalı istekler loglarda 200 görünüyordu
Codegen Yeni serviste wwwroot yoktu Yerel dotnet run'da görsel yükleme 500
Identity Admin paneli rol listesi sabitti Yeni roller panelden atanamıyordu
Bağımlılık Microsoft.OpenApi 2.0.0 (GHSA-v5pm-xwqc-g5wc) Üretilen servisler artık Microsoft.AspNetCore.OpenApi 10.0.12 ile yamalı sürümü alıyor
Bağımlılık Testlerde SSH.NET 2025.1.0 (yüksek) Testcontainers 4.15.0
Codegen / Identity KnownNetworks eskimiş (ASPDEPR005) KnownIPNetworks
Designer Favicon yoktu Her açılışta konsolda 404
API Veritabanı kısıt ihlalleri işlenmiyordu Zorunlu ilişkisi eksik kayıt / tekrar eden benzersiz alan 500 dönüyordu; artık 400 / 409 (tablo/kısıt adları sızdırılmaz)
Codegen Yerel dotnet run'da host.docker.internal çözülmüyordu Loglar Loki'ye, JWT doğrulaması Identity'ye ulaşmıyordu; launchSettings.json artık localhost karşılıklarını veriyor

Kırıcı değişiklikler

  • JWT claim eşlemesi: EnableJwt artık MapInboundClaims = false, RoleClaimType = "role", NameClaimType = "sub" kullanıyor. Servis kodunda ClaimTypes.Role / ClaimTypes.NameIdentifier ile claim arayan yerler kısa adları (role / sub) aramalı. [Authorize(Roles = ...)] ve User.IsInRole artık ek kod olmadan çalışır; projelerdeki elle yazılmış AdminAuth benzeri sınıflar kaldırılabilir.
  • Kayıt varsayılan olarak kapalı: yeniden üretilen bir Identity'de kayıt kapanır. Kayıt gereken projeler auth.yaml'a registration: { enabled: true } eklemeli.
  • Middleware sırası: UseBaseForge içinde istek logu artık istisna yakalayıcının dışında.

Yükseltme

  1. Paketleri 0.6.0-beta'ya yükseltin, CLI'yı güncelleyin: dotnet tool update -g BaseForge.CodeGen --prerelease.
  2. Servisleri yeniden üretin (baseforge update <servis>); yetkilendirme için access / ownerField ekleyin.
  3. Prod'da servis ortamına Auth__Authority ve Identity'nin issuer'ıyla aynı Auth__Issuer verin.
  4. Kayıt gerektiren Identity'lerde registration.enabled: true yazın.

Bilinen kısıtlar

  • superRoles multi-tenant servislerde kiracı filtresini atlamaz.
  • Sayaç (increment) uçları her zaman herkese açık.
  • Identity admin paneli yalnızca Admin rolüne açık (SuperAdmin ayrıca Admin olmalı).
  • EnsureCreated var olan veritabanını güncellemez; servis spec'ine alan eklendiğinde mevcut DB için EF migration gerekir (Identity profil alanları hariç — onlar kolon olarak otomatik eklenir; silme/tip değişikliği elle).
  • Profil alanları kayıt formunda sorulmaz (kayıttan sonra profil sayfasında doldurulur). Alan sırası değişirse user.proto numaraları değişir — Identity ve identity/User tüketicileri birlikte yeniden üretilmeli.

v0.4.1-beta

Choose a tag to compare

@DropDeart DropDeart released this 17 Jul 11:34
Servis sağlıklarının görüntülenmesi tamamlandı.

Outbox Transition Pattern

Choose a tag to compare

@DropDeart DropDeart released this 17 Jul 07:27
  • Merkezi Loglama sistemine geçildi.

v0.3.2-beta

Choose a tag to compare

@DropDeart DropDeart released this 13 Jul 14:51

Hatalar giderildi.

v0.3.1-beta

Choose a tag to compare

@DropDeart DropDeart released this 13 Jul 14:33
Hata giderildi.

v0.3.0-beta

Choose a tag to compare

@DropDeart DropDeart released this 13 Jul 14:20
Sürüm güncellemesi için versiyon eklendi.

v0.2.3-alpha: feat(designer): Inspector Split açık tema + canlı ER diyagramı sekmesi

Choose a tag to compare

@DropDeart DropDeart released this 05 Jul 18:44

-CLI Komutlar Eklendi. Arayüz tamamlandı.

v0.2.2-alpha: fix(identity): authorize endpoint login'e 302 ile yönlendirsin

Choose a tag to compare

@DropDeart DropDeart released this 29 Jun 10:45
  • EnableJwt: authority/JWKS (asimetrik, offline) doğrulama
  • Merkez auth: config-driven Identity + baseforge new-identity (CLI scaffold)
  • Interaktif login + sosyal sağlayıcı altyapısı (Google/GitHub/Microsoft/Facebook)
  • Testcontainers gerçek Postgres entegrasyon testleri + CI

v0.2.1-alpha

v0.2.1-alpha Pre-release
Pre-release

Choose a tag to compare

@DropDeart DropDeart released this 26 Jun 14:20
  • EnableJwt: authority/JWKS (asimetrik, offline) doğrulama
  • UseBaseForge JWT etkinse auth middleware ekler
  • Merkez auth (BaseForge.Identity) referans servisi
  • Testcontainers gerçek Postgres entegrasyon testleri + CI