Actori și roluri
Tenant = firmă de contabilitate
Secțiune intitulată „Tenant = firmă de contabilitate”În ASYDATA, tenant-ul este o firmă de contabilitate. Izolarea datelor se face pe coloana firm_id
(vezi Multi-tenancy și RLS). Tenant-ul curent se rezolvă per request
din header-ul X-Firm-Id (sau, ulterior, dintr-un claim firm_id din JWT) de către
TenantContextMiddleware.
Relația firmă ↔ companie client
Secțiune intitulată „Relația firmă ↔ companie client”Company (firmă) ──serviced_by_id──> Company (client) IsAccountingFirm = true IsAccountingFirm = false- O firmă deservește multe companii client.
- Un utilizator poate fi membru în mai multe companii (firme + clienți). Componenta
CompanySwitcherdin frontend setează compania activă (active_company_id); header-ulX-Firm-Idse sincronizează la fiecare schimbare.
Roluri de membru
Secțiune intitulată „Roluri de membru”Rolurile de bază sunt definite pe apartenența unui user la o companie (CompanyMember, vezi
asydata-app-backend-dotnet/src/Asy.Domain/Companies/CompanyMember.cs):
| Rol | Descriere | Acces tipic |
|---|---|---|
| Owner | Proprietarul firmei. Acces total + poate transfera proprietatea / șterge compania. | Tot |
| Admin | Acces total la firmă, fără transfer de proprietate. | Tot |
| Accountant | Contabil (staff). Lucrează cu clienții firmei. | Operațiuni, bancă, facturi, integrări, HR (view) |
| Member | Membru regular, acces limitat la propria activitate. | Dashboard, logs, operațiuni (read) |
| Viewer | Read-only. | Dashboard, operațiuni (read) |
| Portal | Rolul companiei client. Strict read-only pe propriile date. | Cabinetul clientului |
Permisiuni dinamice (RBAC per modul)
Secțiune intitulată „Permisiuni dinamice (RBAC per modul)”Autorizarea este o matrice (rol × modul) stocată per companie (RolePermission):
CompanyId + RoleKey + ModuleKey → { CanView, CanCreate, CanEdit, CanDelete, TaskVisibility }- Backend: filtre de tip
RequirePermission("efactura", "view")→IPermissionEnforcer.CheckAsync(...); iarRequireModule("...")verifică dacă modulul e activ pentru tenant. - Frontend: hook-ul
useMyPermissions()întoarceMyPermissionsDto { modules: [...] }și ascunde/dezactivează UI-ul în funcție de permisiuni.
Modulele tipice gating-uite: efactura, accounting, tasks, contracts, crm, partners,
banking etc.
Aplicație principală vs portal client
Secțiune intitulată „Aplicație principală vs portal client”Nu sunt două aplicații separate, ci două vederi ale aceleiași aplicații:
| Aspect | Aplicația principală (contabil) | Portal client |
|---|---|---|
| Rute | /home, /facturare, /contabilitate, /crm… | /cabinet (clientul propriu) sau /preview-client/$id (preview pentru contabil) |
| Rol | Owner / Admin / Accountant / Member / Viewer | Portal |
| Conținut | CRUD complet pe modulele active | Dashboard KPI + scadențe + facturi + contracte (read-only) |
| Tenant | Firma de contabilitate | Compania client (sub tenant-ul firmei) |
- Autentificare și autorizare — login, sesiune, enforcement.
- Multi-tenancy și RLS — izolarea pe
firm_id.