Arayüzde Buton Gizlemek Neden Güvenlik Değildir?
Kurumsal B2B yazılımlarda yalnızca ön yüzde (UI) menü gizlemek gerçek bir güvenlik sağlamaz. Her bir Server Action, API uç noktası ve veritabanı sorgusu; oturum açan kullanıcının rolünü ve müşteri (tenant) sınırını sunucu tarafında bağımsız olarak doğrulamalıdır.
Mimari İlke: İstemciden gelen müşteri kimliğine (customerId) veya rol bilgisine asla güvenilmez; yetki her zaman sunucu oturumundan (HTTP-Only Session) çözülür.
BAYAKA Yazılım'da Uyguladığımız 3 Katmanlı İzolasyon Modeli
- 1Oturum ve Origin Doğrulaması: HTTP-only çerezler ve
Origin/Hostbaşlık doğrulaması ile CSRF saldırıları daha ilk katmanda engellenir. - 2Merkezi Yetki Matrisi (`can(role, permission)`):
SUPER_ADMIN,ADMIN,PROJECT_MANAGER,DEVELOPERveCUSTOMERrolleri birbirinden kesin sınırlarla ayrılır. - 3Veritabanı Sorgu İzolasyonu: Müşteri portalındaki her Prisma sorgusu doğrudan kullanıcının
customerIdkimliğiyle filtrelenir; böylece başka bir müşterinin projesine veya dosyasına erişim mimari düzeyde imkânsız hale gelir.
export async function requirePortalProject(projectId: string) {
const user = await requireSessionUser();
if (!user.customerId) throw new HttpError(403, "forbidden");
return db.project.findFirstOrThrow({
where: { id: projectId, customerId: user.customerId },
});
}Değiştirilemez Denetim İzi (Audit Log)
Fiyat teklifi oluşturmadan kullanıcı yetkilendirmeye kadar tüm kritik yönetim aksiyonları kimlik, zaman damgası ve hedef varlık bilgisiyle AuditLog tablosuna işlenir.