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:
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 sistemaTres cosas que se leen ahí:
- El prefijo es el plugin, o
corepara lo que trae el framework. allowodeny. 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:defaultse 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.