Sari la conținut

Actori și roluri

Î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.

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 CompanySwitcher din frontend setează compania activă (active_company_id); header-ul X-Firm-Id se sincronizează la fiecare schimbare.

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):

RolDescriereAcces tipic
OwnerProprietarul firmei. Acces total + poate transfera proprietatea / șterge compania.Tot
AdminAcces total la firmă, fără transfer de proprietate.Tot
AccountantContabil (staff). Lucrează cu clienții firmei.Operațiuni, bancă, facturi, integrări, HR (view)
MemberMembru regular, acces limitat la propria activitate.Dashboard, logs, operațiuni (read)
ViewerRead-only.Dashboard, operațiuni (read)
PortalRolul companiei client. Strict read-only pe propriile date.Cabinetul clientului

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(...); iar RequireModule("...") verifică dacă modulul e activ pentru tenant.
  • Frontend: hook-ul useMyPermissions() întoarce MyPermissionsDto { modules: [...] } și ascunde/dezactivează UI-ul în funcție de permisiuni.

Modulele tipice gating-uite: efactura, accounting, tasks, contracts, crm, partners, banking etc.

Nu sunt două aplicații separate, ci două vederi ale aceleiași aplicații:

AspectAplicația principală (contabil)Portal client
Rute/home, /facturare, /contabilitate, /crm…/cabinet (clientul propriu) sau /preview-client/$id (preview pentru contabil)
RolOwner / Admin / Accountant / Member / ViewerPortal
ConținutCRUD complet pe modulele activeDashboard KPI + scadențe + facturi + contracte (read-only)
TenantFirma de contabilitateCompania client (sub tenant-ul firmei)