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

CampoTipoRequiredDescrizione
idstringIdentificativo univoco utente
usernamestringUsername/login
emailstringEmail di contatto
rolesstring[]Ruoli applicativi (es: ['admin', 'editor']). Usato da checkRouteAccess
permissionsstring[]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