Pimia
DocumentaciónFrontendIntegracionesAPI ReferenceKnowledge BaseChangelog
PantallasAjustes

Roles y permisos

Ruta /pimia/ajustes/roles · componentes, campos y acciones del checkout documentado.

Ruta y puntos de edición

Ruta: /pimia/ajustes/roles. Revisión: 2aec1b16cc01.

Esta ficha procede de lectura estática del código. Los componentes asociados pueden incluir diálogos cerrados y bloques condicionales. Las expresiones dinámicas se conservan como código; no equivalen a campos siempre visibles ni a permisos concedidos.

Vista en el tenant de referencia

Roles y permisos en Pimia

Captura de escritorio del tenant de demostración Reformas Vera, S.L., tomada el 10 de septiembre de 2026. Los datos ilustran la composición de la pantalla y pueden cambiar.

CapaArchivo relativo al repositorio
Rutasrc/app/pimia/ajustes/roles/page.tsx
Adaptador Next.jssrc/host/screens/PimiaAjustesScreens.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaRolesScreen.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaStates.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaAjustesShell.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaPageHeader.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaRoleDialog.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaConfirmDialog.tsx
Vista o componente asociadosrc/features/pimia/ui/PimiaConnectDialog.tsx

PimiaRolesScreen

Fuente: src/features/pimia/ui/PimiaRolesScreen.tsx.

Campos y controles

La columna «Reglas JSX» recoge propiedades explícitas; la validación adicional vive en los helpers y en el servidor. El enlace de estado indica dónde se lee el valor.

Etiqueta o pistaControlEnlace de estadoReglas JSXLínea
abilityLabel(ability)Checkboxchecked.has(ability.ability)disabled=!editable780

Acciones

Rótulo literalHandler o envíoDeshabilitado cuandoLínea
Nuevo rol() => { setCreateError(null); setIsDialogOpen(true); }No declarado en este nodo345
Dar de alta el primero() => setIsDialogOpen(true)No declarado en este nodo400
Rótulo dinámico / icono() => setSelectedId(role.id)No declarado en este nodo422
Borrar el rol() => { setDeleteError(null); setToDelete({ id: activeRole.id, label: roleLabel(activeRole), }); }No declarado en este nodo488
Guardar() => void guardar()!sucio || save.isPending || abilitiesQuery.isPending507
/onToggleOpenNo declarado en este nodo722
Rótulo dinámico / iconoonToggleModuleNo declarado en este nodo757

Estados reutilizados

  • PimiaNotConnected
  • PimiaRowsSkeleton
  • PimiaErrorState
  • PimiaEmpty

Clases de presentación locales

Selección de clases literales; las clases condicionales y los estilos de los primitivos se consultan en el archivo.

bg-muted/40, text-sm, text-muted-foreground, overflow-hidden, bg-card, bg-muted/30, p-2, gap-3, p-4, text-foreground, text-xs, gap-2, p-6, text-destructive, p-3, text-left, text-primary, gap-x-6, gap-y-2, md:grid-cols-2.

PimiaStates

Fuente: src/features/pimia/ui/PimiaStates.tsx.

Acciones

Rótulo literalHandler o envíoDeshabilitado cuandoLínea
Conectar una empresa() => setIsConnectOpen(true)No declarado en este nodo99
Rótulo dinámico / icono() => void goPimiaPath(notFound.listPath)No declarado en este nodo233
Rótulo dinámico / iconodelegado al contenedorNo declarado en este nodo247
Rótulo dinámico / icono() => void goPimiaPath( closedDoor.action?.kind === "plan" ? PLAN_PATH : MODULES_SETTINGS_PATH, )No declarado en este nodo257
Volver a conectar() => setIsConnectOpen(true)No declarado en este nodo273
ReintentaronRetryNo declarado en este nodo279

Clases de presentación locales

Selección de clases literales; las clases condicionales y los estilos de los primitivos se consultan en el archivo.

gap-4, p-8, text-center, text-base, text-foreground, text-sm, text-muted-foreground, gap-2, overflow-hidden, bg-muted/40.

PimiaAjustesShell

Fuente: src/features/pimia/ui/PimiaAjustesShell.tsx.

Campos y controles

La columna «Reglas JSX» recoge propiedades explícitas; la validación adicional vive en los helpers y en el servidor. El enlace de estado indica dónde se lee el valor.

Etiqueta o pistaControlEnlace de estadoReglas JSXLínea
Sin etiqueta literal resolubleSelectactiveNo declaradas en este nodo322

Acciones

Rótulo literalHandler o envíoDeshabilitado cuandoLínea
Rótulo dinámico / icono() => void goPimiaPath(`/pimia/ajustes/${s.slug}`)No declarado en este nodo283

Clases de presentación locales

Selección de clases literales; las clases condicionales y los estilos de los primitivos se consultan en el archivo.

gap-6, overflow-y-auto, p-6, xl:gap-8, gap-2.5, text-muted-foreground/50, text-sm, text-badge.

PimiaRoleDialog

Fuente: src/features/pimia/ui/PimiaRoleDialog.tsx.

Campos y controles

La columna «Reglas JSX» recoge propiedades explícitas; la validación adicional vive en los helpers y en el servidor. El enlace de estado indica dónde se lee el valor.

Etiqueta o pistaControlEnlace de estadoReglas JSXLínea
NombreInputnamemaxLength=5084

Acciones

Rótulo literalHandler o envíoDeshabilitado cuandoLínea
Cancelar() => props.onOpenChange(false)No declarado en este nodo118
Dar de altasubmitprops.isSaving125

Clases de presentación locales

Selección de clases literales; las clases condicionales y los estilos de los primitivos se consultan en el archivo.

text-xs, text-muted-foreground, text-sm, text-destructive.

PimiaConfirmDialog

Fuente: src/features/pimia/ui/PimiaConfirmDialog.tsx.

Acciones

Rótulo literalHandler o envíoDeshabilitado cuandoLínea
Rótulo dinámico / icono(event) => { event.preventDefault(); onConfirmar(); }enVuelo91

Clases de presentación locales

Selección de clases literales; las clases condicionales y los estilos de los primitivos se consultan en el archivo.

text-sm, text-destructive.

PimiaConnectDialog

Fuente: src/features/pimia/ui/PimiaConnectDialog.tsx.

Campos y controles

La columna «Reglas JSX» recoge propiedades explícitas; la validación adicional vive en los helpers y en el servidor. El enlace de estado indica dónde se lee el valor.

Etiqueta o pistaControlEnlace de estadoReglas JSXLínea
Tu empresaInputbaseUrldisabled=connect.isPending114

Acciones

Rótulo literalHandler o envíoDeshabilitado cuandoLínea
Cancelar() => handleOpenChange(false)No declarado en este nodo155
Rótulo dinámico / iconosubmit del formulario!canSubmit162

Clases de presentación locales

Selección de clases literales; las clases condicionales y los estilos de los primitivos se consultan en el archivo.

text-sm, text-foreground, gap-2, text-muted-foreground, text-xs, text-destructive.

Hooks, adaptadores y utilidades relacionados

  • src/features/pimia/api/auth.ts
  • src/features/pimia/api/pimiaClient.ts
  • src/features/pimia/api/roles.ts
  • src/features/pimia/hooks/usePimiaAuth.ts
  • src/features/pimia/hooks/usePimiaResources.ts
  • src/features/pimia/hooks/usePimiaRoles.ts
  • src/features/pimia/lib/abilityMatrix.ts
  • src/features/pimia/lib/closedDoors.ts
  • src/features/pimia/lib/missingRecord.ts
  • src/features/pimia/lib/scopeDenial.ts

Antes de entregar un retoque

  • Revisa los archivos de formulario y sus helpers antes de cambiar tipos, obligatoriedad o valores iniciales.
  • Prueba carga, error, vacío, permisos insuficientes y guardado pendiente en las variantes que usa esta pantalla.
  • Comprueba escritorio, móvil, teclado, tema oscuro y scroll con suficientes filas.
  • Conserva los handlers y la invalidación de datos al modificar la presentación.

En esta página