Multi-Tenancy
Acest conținut nu este încă disponibil în limba selectată.
Fiecare organizație este un spațiu izolat. Operatorii, bucket-urile și documentele unei organizații nu sunt vizibile din altă organizație. Partajarea între organizații se face doar explicit, prin PartajareDocument.
Tier-uri
Section titled “Tier-uri”Rezolvate per-request din AppUser + authority-uri + BucketAcces (security/tenant/TenantContextResolver).
flowchart TD A{ROLE_ADMIN?} -->|da| B{organizatie == null?} A -->|nu| C{organizatie != null?} B -->|da| SA[SERVICE_ADMIN<br/>vede tot] B -->|nu| OA[ORG_ADMIN<br/>o singură organizație] C -->|da| BU[Utilizator de bucket<br/>doar bucket-urile asignate] C -->|nu| CET[Cetățean<br/>public + proprii + partajări]| Tier | Cine | Vede |
|---|---|---|
| SERVICE_ADMIN | ROLE_ADMIN + fără organizație (ex. admin, securizat) | tot (toate org/bucket/nivele) |
| ORG_ADMIN | ROLE_ADMIN + organizație | toată organizația sa (toate bucket-urile ei) |
| Utilizator de bucket | ROLE_USER + organizație + BucketAcces | doar bucket-urile asignate + proprii + partajări |
| Cetățean | ROLE_USER + Client, fără organizație | public + proprii + partajări |
La login se mint authority-uri derivate: ROLE_SERVICE_ADMIN / ROLE_ORG_ADMIN (ambele căi: JWT și OIDC). Rolurile la nivel de bucket (ADMIN/OPERATOR) sunt bazate pe date (BucketAcces), NU authorities.
Izolare (regula ACL)
Section titled “Izolare (regula ACL)”Peste nivelurile L1/L2/L3, în DocumentAccessControl.readableSpecification():
- SERVICE_ADMIN → vede tot (inclusiv L3).
- Legat de organizație (ORG_ADMIN / utilizator de bucket) → scope:
- ORG_ADMIN:
document.organizatie == organizația mea - utilizator de bucket:
document.bucket ∈ bucket-urile mele - scope-ul acoperă L1+L2; L3 tot cu clearance + grant explicit, chiar și în propria organizație.
- ORG_ADMIN:
- Cetățean / anonim → public + proprii + emitent + partajări (fără scoping pe tenant; anonimul vede portalul public L1 global).
Notă (izolare strictă): un utilizator legat de o organizație vede doar documentele PUBLICE ale ORGANIZAȚIEI SALE. Portalul public (utilizatori anonimi,
/api/public/**) rămâne global.
Stocare per-bucket (bring-your-own S3/MinIO)
Section titled “Stocare per-bucket (bring-your-own S3/MinIO)”Fiecare Bucket poate avea propria conexiune de stocare:
provider(MINIO/S3),endpoint,regiune,accessKey,secretKeyEnc(AES-criptat, niciodată returnat).endpointgol → se folosește MinIO-ul implicit al platformei.StorageService/MinioStorageServicerutează per bucket fizic (client cache per endpoint);BucketStorageResolverdecriptează secretul și construieșteStorageTarget.- Upload/download/arhivare folosesc bucket-ul fizic al documentului.
Administrare (UI + API)
Section titled “Administrare (UI + API)”- Pagina „Organizații & bucket-uri” (
/organizatii, sub Administrare):- Organizații: creare/editare/statut (SERVICE_ADMIN).
- Bucket-uri: creare/editare (ORG_ADMIN pe org proprie, SERVICE_ADMIN oriunde), config S3/MinIO, mutare bucket între organizații; rânduri expandabile cu membri (grant/revoke OPERATOR/ADMIN).
- Pagina Utilizatori (
/utilizatori): coloană „Organizație” + tab „Editare” → asignare user→organizație. - Endpoint-uri: vezi API-Reference → secțiunea Multi-tenancy.
Documente & backfill
Section titled “Documente & backfill”- Seed demo (
DemoDataInitializer) creează organizații/bucket-uri/documente pe bază de date goală. MultiTenancyBackfill(@Order 21) migrează instanțele deja populate: creeazăORG-DEFAULT+ bucketdefaultși mută documentele/operatorii existenți acolo.