Saltar al contenido

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

¿Siempre verdadera (tautología)? No Contraejemplo: owner = F, admin = F, editor = F, locked = F · Exhaustively checked and solver cross-checked · 1 filas
¿Siempre falsa (contradicción)? No Contraejemplo: owner = F, admin = F, editor = V, locked = F · Exhaustively checked and solver cross-checked · 3 filas
¿Puede ser verdadera? Sí Asignación de ejemplo: owner = F, admin = F, editor = V, locked = F · Exhaustively checked and solver cross-checked · 3 filas

Tabla de verdad (16 filas)

Reglas de control de acceso: roles, excepciones y el error del usuario vetado
#owneradmineditorlockedcan_edit
0FALSOFALSOFALSOFALSOFALSO
1FALSOFALSOFALSOVERDADEROFALSO
2FALSOFALSOVERDADEROFALSOVERDADERO
3FALSOFALSOVERDADEROVERDADEROFALSO
4FALSOVERDADEROFALSOFALSOVERDADERO
5FALSOVERDADEROFALSOVERDADEROVERDADERO
6FALSOVERDADEROVERDADEROFALSOVERDADERO
7FALSOVERDADEROVERDADEROVERDADEROVERDADERO
8VERDADEROFALSOFALSOFALSOVERDADERO
9VERDADEROFALSOFALSOVERDADEROVERDADERO
10VERDADEROFALSOVERDADEROFALSOVERDADERO
11VERDADEROFALSOVERDADEROVERDADEROVERDADERO
12VERDADEROVERDADEROFALSOFALSOVERDADERO
13VERDADEROVERDADEROFALSOVERDADEROVERDADERO
14VERDADEROVERDADEROVERDADEROFALSOVERDADERO
15VERDADEROVERDADEROVERDADEROVERDADEROVERDADERO

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

Access control rules: roles, exceptions and the banned-user slip Access control rules: roles, exceptions and the banned-user slip owner admin editor locked can_edit OR AND NOT
Access control rules: roles, exceptions and the banned-user slip Access control rules: roles, exceptions and the banned-user slip owner admin editor locked can_edit OR AND NOT

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

Pruebas y reglas

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.