Types
MFEUser
Utente autenticato nell'applicazione. ID, username, email, ruoli e permessi. Estendibile per campi custom di progetto.
Contratto
interface MFEUser {
id: string
username: string
email?: string
roles?: string[]
permissions?: string[]
}
Campi
| Campo | Tipo | Required | Descrizione |
|---|---|---|---|
id | string | ✓ | Identificativo univoco utente |
username | string | ✓ | Username/login |
email | string | — | Email di contatto |
roles | string[] | — | Ruoli applicativi (es: ['admin', 'editor']). Usato da checkRouteAccess |
permissions | string[] | — | Permessi granulari (es: ['crm.read', 'crm.write']). Usato da checkPermissions e dalla direttiva v-can |
Accesso dal MFE
import { useMfeContext } from '@pzeta/mfe-contracts/composables'
const ctx = useMfeContext()
const user = ctx.getUser?.()
if (user) {
console.log(user.id, user.username)
console.log('Ruoli:', user.roles)
console.log('Permessi:', user.permissions)
}
getUser() ritorna null se l'utente non è autenticato. Sempre verifica prima dell'accesso ai campi.Permission model
Wildcard * per admin
// L'utente admin ha solo "*" come permission
const admin: MFEUser = {
id: 'usr_admin',
username: 'admin',
permissions: ['*'],
}
checkPermissions(['crm.read', 'crm.write'], admin.permissions) // true
checkPermissions(['anything'], admin.permissions) // true
La wildcard è gestita da checkPermissions per evitare di enumerare ogni permesso nelle policy. La sicurezza reale resta server-side.
Logica OR per route
// L'utente ha almeno UNO dei permessi richiesti?
const route: MFERoute = {
path: '/admin',
label: 'Admin Panel',
meta: { roles: ['admin', 'superuser'] },
}
checkRouteAccess(route, user.roles) // true se user.roles include admin o superuser
Estensione per campi custom
L'interfaccia è progettata per essere estesa quando il progetto ha campi aggiuntivi:
import type { MFEUser } from '@pzeta/mfe-contracts'
interface MyUser extends MFEUser {
displayName: string
department: string
avatarUrl?: string
lastLoginAt?: string
}
// Uso
const ctx = useMfeContext()
const user = ctx.getUser?.() as MyUser | null
if (user) {
console.log(user.displayName, user.department)
}
La shell e il MFE devono concordare la forma del
MFEUser esteso. La libreria espone solo l'interfaccia base.Tipi correlati
MFEContext.getUser— accessor dall'interno del MFEcheckPermissions— verificauser.permissionscheckRouteAccess— verificauser.rolescontroroute.meta.rolescreateCanDirective— direttivav-cancon factory dai permessi utente