Saltar al contenido

Dos formas de tocar el disco

El plugin de ficheros expone operaciones al frontend con ámbitos declarados; un comando en Rust expone la operación concreta. El criterio para elegir, y la superficie que ahorra elegir bien.

Las dos formas

La cuarta fila es la que decide. Es el mismo razonamiento del nivel 14.4 y del 38.2: la diferencia entre exponer una primitiva y exponer una operación no se nota mientras todo va bien, y lo es todo cuando algo va mal.

El criterio

Tres preguntas, y la primera suele bastar:

La respuesta corta que sale de las tres: el plugin para lo que el usuario señala explícitamente; comandos para lo que tu aplicación guarda.

El selector, que es el caso limpio

Merece detallarlo porque es donde el plugin brilla y donde el modelo de seguridad funciona como debe:

Cuando el usuario abre un diálogo del sistema y elige un fichero, el sistema operativo le concede a tu aplicación acceso a ese fichero concreto. No es tu ámbito lo que lo autoriza: es la elección del usuario, hecha en una interfaz que no controlas y que él reconoce.

Eso tiene tres propiedades buenas:

  • El permiso es del fichero, no del directorio. Aunque tu ámbito sea estrecho, el fichero elegido se puede leer.
  • El usuario sabe qué está autorizando, porque lo acaba de señalar.
  • Y funciona con aislamiento de aplicación, que es lo que exige la tienda de Apple.

Ese es el patrón correcto para «abrir» y «guardar como», y no requiere un ámbito ancho. Si te ves ampliando el ámbito para que el usuario pueda abrir sus ficheros, casi siempre la respuesta es usar el selector en vez de ampliar.

Cuánta superficie ahorra elegir bien

Una cuenta concreta, porque es lo que convence:

Una aplicación que expone el plugin con ámbito en el directorio de datos le da al frontend cuatro operaciones sobre todos los ficheros de la aplicación: leer, escribir, listar, borrar. Si ahí viven la base de datos, la configuración y los proyectos del usuario, un frontend comprometido puede leerlo todo y destruirlo todo.

La misma aplicación con comandos de dominio expone, típicamente, entre cinco y diez operaciones concretas —abrir un proyecto, guardar un proyecto, listar los recientes— cada una con su validación. Un frontend comprometido puede llamarlas con argumentos raros, y eso es todo.

Más comandos, menos superficie. Es contraintuitivo y es exactamente lo que dice la cuenta del nivel 26.3.