From 11d5261f4774c9e6aeb722a1b549411843922e43 Mon Sep 17 00:00:00 2001 From: admin-valentin Date: Sat, 1 Aug 2026 09:57:58 +0000 Subject: [PATCH] feat(cc-050): Roles & Permissions page --- src/app/dashboard/privacy/roles/page.tsx | 95 ++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 src/app/dashboard/privacy/roles/page.tsx diff --git a/src/app/dashboard/privacy/roles/page.tsx b/src/app/dashboard/privacy/roles/page.tsx new file mode 100644 index 0000000..1ed8744 --- /dev/null +++ b/src/app/dashboard/privacy/roles/page.tsx @@ -0,0 +1,95 @@ +'use client'; + +import { useQuery } from '@tanstack/react-query'; +import { apiFetch } from '../../../../lib/api'; +import type { Member } from '../../../../lib/api'; +import { useSession } from '../../../../components/session-provider'; + +const ROLE_PERMS: Record = { + owner: ['Acces complet', 'Gestionare membri', 'Configurare workspace', 'Date administrative'], + admin: ['Citire și scriere date', 'Gestionare membri', 'Configurare workspace'], + member: ['Citire și scriere date'], +}; + +const ROLE_BADGE: Record = { + owner: 'bg-bronze-wash text-bronze-deep', + admin: 'bg-paper-sunken text-ink', + member: 'bg-paper-sunken text-ink-faint', +}; + +export default function RolesPage() { + const { activeTenant } = useSession(); + const tenantId = activeTenant?.tenantId ?? ''; + + const { data: members = [], isLoading } = useQuery({ + queryKey: ['members-roles', tenantId], + queryFn: () => apiFetch('/v1/tenants/current/members', { tenantId }), + enabled: Boolean(tenantId), + staleTime: 60_000, + }); + + return ( +
+
+

Roluri & Permisiuni

+

+ RBAC — roluri active și permisiunile asociate în workspace. +

+
+ +
+

+ Definiții roluri +

+
+ {Object.entries(ROLE_PERMS).map(([role, perms]) => ( +
+ + {role} + +
    + {perms.map((p) => ( +
  • + {p} +
  • + ))} +
+
+ ))} +
+
+ +
+

+ Membri ({isLoading ? '…' : members.length}) +

+ {isLoading ? ( +

Se încarcă…

+ ) : members.length === 0 ? ( +
Niciun membru găsit.
+ ) : ( +
    + {members.map((m) => ( +
  • +
    +

    {m.email ?? '(fără email)'}

    +

    {m.userId}

    +
    +
    + + {m.role} + + {m.createdAt && ( + + {new Date(m.createdAt).toLocaleDateString('ro-RO')} + + )} +
    +
  • + ))} +
+ )} +
+
+ ); +}