Reglas de control de acceso: roles, excepciones y el error del usuario vetado
Las reglas de acceso combinan roles que conceden, roles que conceden con condiciones, y un bloqueo o veto que tiene prioridad. owner OR admin OR (editor AND NOT locked) es el patrón con cuatro condiciones, y el error del usuario vetado es la equivocación que existe para evitar.
Los propietarios y los administradores siempre pueden editar; los editores pueden editar a menos que el documento esté bloqueado. El paréntesis es todo el diseño: editor AND NOT locked mantiene el bloqueo pegado al rol de editor, de modo que el bloqueo no detiene a propietarios ni administradores, que deben poder desbloquear. Las comprobaciones de la página muestran la regla contingente con el testigo editor = VERDADERO, locked = FALSO, el resto FALSO, como una fila que concede.
El error del usuario vetado es el error de agrupación de la regla de entrada con otro disfraz. Un veto global que debe prevalecer sobre todos los roles es un AND NOT en el nivel superior, (owner OR admin OR (editor AND NOT locked)) AND NOT banned; escrito como owner OR admin OR (editor AND NOT banned) veta solo a los editores, y los propietarios vetados siguen editando. El comprobador de equivalencia informa de las filas en las que las dos difieren, y son precisamente los propietarios vetados y los administradores vetados.
Las reglas de esta forma crecen añadiendo roles al OR y excepciones al AND NOT, y las pruebas que las mantienen honestas son los pares de independencia: un par por rol muestra que el rol concede por sí solo, y un par por excepción muestra que la excepción revoca por sí sola. Cuatro condiciones dan cuatro pares en unos cinco escenarios, muchos menos que las dieciséis filas, y un contraejemplo de un incidente pasado merece conservarse como prueba mientras exista la regla.
Ejemplo
can_edit := owner OR admin OR (editor AND NOT locked) · salida
Comprobaciones exactas
Tabla de verdad (16 filas)
| # | owner | admin | editor | locked | can_edit |
|---|---|---|---|---|---|
| 0 | FALSO | FALSO | FALSO | FALSO | FALSO |
| 1 | FALSO | FALSO | FALSO | VERDADERO | FALSO |
| 2 | FALSO | FALSO | VERDADERO | FALSO | VERDADERO |
| 3 | FALSO | FALSO | VERDADERO | VERDADERO | FALSO |
| 4 | FALSO | VERDADERO | FALSO | FALSO | VERDADERO |
| 5 | FALSO | VERDADERO | FALSO | VERDADERO | VERDADERO |
| 6 | FALSO | VERDADERO | VERDADERO | FALSO | VERDADERO |
| 7 | FALSO | VERDADERO | VERDADERO | VERDADERO | VERDADERO |
| 8 | VERDADERO | FALSO | FALSO | FALSO | VERDADERO |
| 9 | VERDADERO | FALSO | FALSO | VERDADERO | VERDADERO |
| 10 | VERDADERO | FALSO | VERDADERO | FALSO | VERDADERO |
| 11 | VERDADERO | FALSO | VERDADERO | VERDADERO | VERDADERO |
| 12 | VERDADERO | VERDADERO | FALSO | FALSO | VERDADERO |
| 13 | VERDADERO | VERDADERO | FALSO | VERDADERO | VERDADERO |
| 14 | VERDADERO | VERDADERO | VERDADERO | FALSO | VERDADERO |
| 15 | VERDADERO | VERDADERO | VERDADERO | VERDADERO | VERDADERO |
Lectura en lenguaje claro
Principiantecan_edit es verdadero exactamente cuando se cumple al menos una de las condiciones siguientes (pueden cumplirse varias):
1. owner es verdadero
2. admin es verdadero
3. editor es verdadero y locked es falso
En todos los demás casos, can_edit es falso.
Sobre los operadores:
- OR (O) es inclusivo: es verdadero en cuanto al menos una parte es verdadera, también cuando lo son varias.
- AND (Y) solo es verdadero cuando todas sus partes son verdaderas.
- NOT (NO) invierte un valor: lo verdadero pasa a ser falso y lo falso, verdadero.
Intermediocan_edit es verdadero exactamente cuando se cumple al menos una de las condiciones siguientes (pueden cumplirse varias):
1. owner es verdadero
2. admin es verdadero
3. editor es verdadero y locked es falso
En todos los demás casos, can_edit es falso.
Avanzadocan_edit es verdadero exactamente cuando se cumple al menos una de las condiciones siguientes (pueden cumplirse varias) [disyunción inclusiva ∨]:
1. owner es verdadero
2. admin es verdadero
3. editor es verdadero y locked es falso [conjunción ∧]
En todos los demás casos, can_edit es falso.
Notación formal: owner ∨ admin ∨ (editor ∧ ¬locked)
Diagrama lógico
El error habitual
Pegar un veto global a un solo rol. owner OR admin OR (editor AND NOT banned) deja editar a un propietario vetado. Un veto que prevalece sobre todo es (…) AND NOT banned alrededor de toda la regla, y la tabla muestra la fila del propietario vetado en cualquiera de los dos casos.
Preguntas
¿El bloqueo debería prevalecer sobre los administradores?
Eso es una cuestión de política, y la fórmula registra la respuesta. Tal como está escrita, no: locked está dentro del paréntesis del editor. Para que prevalezca sobre todos, mueve AND NOT locked fuera, y el comprobador de equivalencia enumerará las filas que cambian.
¿Cómo expreso «al menos uno de varios roles»?
Como un OR de los roles, que es inclusivo: un usuario con dos roles cumple. Si los roles son excluyentes por construcción, dilo como supuesto, y las comprobaciones lo respetarán.
Relacionado
Véase también
- Regla de control de acceso: propietario OR admin OR (editor AND NOT bloqueado)
- Regla de entrada: (socio OR invitado) AND NOT vetado, comprobada de todas las formas
- El error de la regla de entrada: socio OR (invitado AND NOT vetado) y el caso que difiere
- Reglas de elegibilidad: el patrón, las excepciones habituales y las pruebas
- Lógica de feature flags: combinar flags sin sorpresas
- «A menos que» en una regla: AND NOT, no OR
- «A o B y C»: la ambigüedad de agrupación y cómo resolverla
- Convertir un contraejemplo en una prueba de regresión
Pruebas y reglas
- Tabla de decisión frente a tabla de verdad: cuándo usar cada una
- Prueba con tabla de decisión, ejemplo resuelto (estilo ISTQB Foundation 4.2.3)
- MC/DC explicado: cobertura de condición/decisión modificada para reglas booleanas
- Pares de independencia MC/DC, ejemplo resuelto con el informe de cobertura del motor
Generado a partir del motor de Tangibool, semántica tangibool-semantics/1, motor 1.0.0, compilación . Cada tabla, mapa, simplificación y veredicto de estas páginas lo calculó el motor de Tangibool al compilar el sitio, y cada afirmación la volvió a comprobar el mismo verificador exacto que usa la app. Los límites se indican donde aplican. © 2026 Foreranger LTD.