- Deleted `pnpm-workspace.yaml` as it is no longer needed. - Removed `apply-migrations.sh` script that handled database migrations. - Eliminated `generate-full-stack-env.mjs` script for environment variable generation. - Deleted `selfhost-backup.sh` script for creating backups of the self-hosted environment. - Removed `selfhost-doctor.sh` script for health checks of the self-hosted services. - Deleted `selfhost-restore.sh` script for restoring backups in the self-hosted environment.
3.6 KiB
title, description, order
| title | description | order |
|---|---|---|
| Client Portal | Müşteri portalının amacı, erişim modeli ve kullanım akışı. | 11 |
Client Portal
Client portal, müşteriye sınırlı ve güvenli bir görünüm sunmak için var. Neta'nın ana dashboard'u freelancer içindir. Müşteriye bu dashboard'u açmak doğru olmaz. Bunun yerine müşteri sadece kendisini ilgilendiren proje, görev ve revizyon bilgilerini görür.
Portalın Amacı
Müşteri portalı şu sorulara cevap verir:
- Projem hangi aşamada?
- Genel ilerleme ne durumda?
- Hangi görevler tamamlandı veya devam ediyor?
- Revizyon talebi gönderebilir miyim?
- Proje teslim tarihi ne?
Bu sayede müşteriyle sürekli manuel durum güncellemesi paylaşmak yerine, kontrollü bir şeffaflık sağlanır.
Roller
Neta'da iki temel rol vardır:
freelancerclient
Freelancer ana paneli kullanır. Client ise portal alanını kullanır.
Rol bilgisi profiles.role alanında tutulur.
Client Auth Bağlantısı
Müşteri portal erişimi için clients tablosunda şu alan kullanılır:
client_auth_id
Bu alan Supabase Auth içindeki müşteri kullanıcısının id değerini tutar.
İlişki şu şekildedir:
auth.users.id -> clients.client_auth_id -> projects.client_id
Bu bağlantı sayesinde müşteri sadece kendi client kaydına bağlı projeleri görebilir.
Müşteri Hesabı Oluşturma
Müşteri public register ekranından kayıt olmaz. Freelancer paneli içinden bir müşteri kaydına portal hesabı oluşturulur.
Bu işlem sırasında:
- Service role ile Supabase Auth user oluşturulur.
- Kullanıcının profile rolü
clientyapılır. clients.client_auth_idalanı yeni kullanıcıya bağlanır.
Bu akış için SUPABASE_SERVICE_ROLE_KEY gereklidir.
Portal Route'ları
Portal route'ları app/portal altında durur.
Ana ekranlar:
/portal/portal/projects/portal/projects/[id]/portal/tasks/portal/revisions
Portal layout, kullanıcının rolünü kontrol eder. Rol client değilse kullanıcı dashboard tarafına yönlendirilir.
Müşteri Neleri Görebilir?
Müşteri şunları görebilir:
- Kendisine bağlı projeler.
- Proje adı, açıklama, durum, ilerleme ve teslim tarihi.
- Public olarak işaretlenmiş görevler.
- Proje planlama bölümleri.
- Kendi revizyon talepleri.
Müşteri şunları görmemelidir:
- Freelancer dashboard'u.
- Finans kayıtları.
- Diğer müşteriler.
- Diğer projeler.
- Private görevler.
- App settings.
- AI chat geçmişi.
Public Task Mantığı
Görevlerde şu alan bulunur:
is_public_to_client
Bu alan true ise müşteri portalında gösterilebilir. Böylece iç operasyon görevleri müşteriyle paylaşılmadan tutulabilir.
Revizyon Talepleri
Müşteri proje detay ekranından revizyon talebi oluşturabilir.
Revizyon durumları:
pendingin_progresscompletedrejected
Freelancer dashboard tarafında bu talepler görülebilir ve durumları güncellenebilir.
Güvenlik Modeli
Portal güvenliği iki katmanda sağlanır:
- Next.js layout seviyesinde rol kontrolü.
- Supabase RLS policy seviyesinde veri erişim kontrolü.
Sadece layout kontrolüne güvenmek doğru değildir. Asıl kritik nokta Supabase policy'lerinin doğru olmasıdır.
Portalı Özelleştirme
Portal menüsü şu dosyadan yönetilir:
config/portal-sidebar.ts
Portal shell bileşeni:
components/layout/portal-shell.tsx
Müşteriye daha fazla bilgi göstermek isterseniz önce RLS politikasını, sonra server component veri sorgusunu, en son UI bileşenini güncellemek gerekir.