Saltar al contenido

Permiso, ámbito y capability

Las tres palabras del modelo, qué significa exactamente cada una, cómo se componen entre sí, y por qué confundirlas hace imposible razonar sobre lo que está abierto.

Las tres

La frase que las ordena: un permiso dice qué se puede hacer, un ámbito dice sobre qué, y una capability dice a quién se le concede.

Cómo se componen

Leer un identificador

Los permisos se nombran con dos partes separadas por dos puntos, y el nombre dice bastante:

TXT
core:default              el conjunto base del frameworkcore:window:allow-close   del núcleo, del módulo de ventana, permite cerrardialog:allow-open         del plugin de diálogos, permite abrirfs:allow-app-read         del plugin de ficheros, leer dentro del directorio de la appfs:deny-default           del plugin de ficheros, la negación por defectoshell:allow-open          del plugin de shell, abrir una URL con el programa del sistema

Tres cosas que se leen ahí:

  • El prefijo es el plugin, o core para lo que trae el framework.
  • allow o deny. Sí, hay permisos de negación, y su prioridad es la del nivel 27.4.
  • Y algunos traen el ámbito en el nombre, como el de leer dentro del directorio de la aplicación: es un permiso ya acotado, y suele ser el que quieres en vez del genérico más un ámbito escrito a mano.

Ese último detalle es el que ahorra más trabajo: antes de escribir un ámbito, comprueba si existe un permiso que ya lo lleve puesto.

Los conjuntos

Además de los permisos sueltos, un plugin puede definir conjuntos: un identificador que agrupa varios permisos. core:default es el más importante y el que toda aplicación tiene.

Los conjuntos son cómodos y son justo donde se concede de más —nivel 26.5—. La regla práctica:

  • core:default se deja. Es el mínimo para que la aplicación funcione: invocar comandos, escuchar eventos, lo básico de la ventana.
  • Los conjuntos por defecto de los plugins se miran. El del plugin de diálogos, por ejemplo, suele conceder abrir y guardar; si tu aplicación solo abre, hay un permiso más estrecho.

El error de mezclarlas

Los tres síntomas de tener las tres palabras confundidas:

Buscar un ámbito donde no lo hay. No todos los permisos admiten ámbito. Un permiso de cerrar la ventana no tiene «sobre qué»: o se puede o no. Buscar cómo acotarlo es perder el tiempo.

Escribir el ámbito en la configuración en vez de en la capability. Hay un ámbito que sí vive en la configuración —el del protocolo de recursos del nivel 7.4— y es la excepción. Todos los demás van en la capability, junto a su permiso.

Creer que una capability es un permiso. Una capability es un contenedor: no concede nada por sí misma, concede lo que nombra dentro. Un proyecto con cinco capabilities no tiene «cinco permisos»: tiene cinco grupos, y hay que sumar lo que hay dentro de cada uno.