Saltar al contenido

Repartir por ventana

El reparto que hace que el modelo valga la pena: cada ventana con lo suyo. Cómo se decide, los comodines para ventanas que no existen todavía, y el caso que lo justifica todo.

El reparto típico

TXT
capabilities/├── base.json         windows: [] … todas — solo core:default├── principal.json    windows: ["main"] — diálogos, ficheros, shell├── ajustes.json      windows: ["settings"] — el almacén de preferencias, nada más└── documentos.json   windows: ["doc-*"] — lectura del directorio de proyectos

Y lo que cada una concede, con el criterio detrás:

Fíjate en la tercera fila: la ventana de ajustes es un formulario y no necesita casi nada. Con una capability global, tendría exactamente lo mismo que la principal. Ese es el reparto en su forma más simple y ya devuelve.

Ventanas que no existen todavía

Las de etiqueta generada del nivel 12.1 —una por documento— no se pueden nombrar una a una. El campo admite comodines:

JSON
{ "identifier": "documentos", "windows": ["doc-*"], "permissions": [ … ] }

Dos consecuencias que hay que tener presentes:

El comodín es una decisión sobre el futuro. Cualquier ventana que se cree con una etiqueta que encaje va a tener esos permisos, incluida una que alguien añada dentro de un año con un propósito distinto. Conviene que el prefijo sea específico —doc- y no v-— para que encajar sea deliberado.

Y por eso la etiqueta importa. Es el argumento del nivel 7.2 con consecuencias de seguridad: la etiqueta de una ventana no es un nombre interno cualquiera, es la clave con la que se le conceden permisos. Una etiqueta derivada de algo que el usuario controla —el nombre de un fichero— podría, en el peor caso, encajar en un comodín que no le correspondía.

La regla: etiquetas con prefijo fijo y sufijo derivado de un identificador interno, nunca de texto del usuario.

El caso que lo justifica todo

El reparto por ventana no existe para aplicaciones con cinco ventanas propias. Existe para esto:

Ése es el ejercicio entero. Sin reparto por ventana, esa vista previa tendría los mismos permisos que tu ventana principal, y todo el trabajo de la fase V estaría protegiendo una puerta con la otra abierta.

Y si tu aplicación no tiene ninguna ventana así, el reparto sigue mereciendo la pena por lo del nivel 26.5 —limitar el daño de una dependencia comprometida— aunque el beneficio sea menor.

El error de conceder a todas

Es el que se comete por comodidad y tiene una forma reconocible: una capability sin campo de ventanas, con muchos permisos, llamada default. Es lo que deja el subcomando que instala plugins —nivel 9.3— acumulado durante meses.

La corrección es un ejercicio de una tarde:

  1. Lista tus ventanas y qué hace cada una.
  2. Para cada permiso de la capability global, decide en qué ventanas hace falta.
  3. Parte el fichero.
  4. Prueba cada ventana. Lo que falle, se concede donde falte.

El paso 4 es el que da miedo y el que hay que hacer: lo que no falle al quitarlo, sobraba.