How It Works
En Casbin, un modelo de control de acceso se abstrae en un archivo CONF basado en el metamodelo PERM (Política, Efecto, Solicitud, Coincidencias). Cambiar o actualizar el mecanismo de autorización para un proyecto es tan simple como modificar una configuración. Puedes personalizar tu propio modelo de control de acceso combinando los modelos disponibles. Por ejemplo, puedes combinar roles RBAC y atributos ABAC juntos dentro de un mismo modelo y compartir un conjunto de reglas de política.
El modelo PERM está compuesto por cuatro fundamentos: Política, Efecto, Solicitud y Coincidencias. Estos fundamentos describen la relación entre recursos y usuarios.
Request
Define los parámetros de la solicitud. Una solicitud básica es un objeto tupla, que requiere al menos un sujeto (entidad accedida), objeto (recurso accedido) y acción (método de acceso).
Por ejemplo, una definición de solicitud puede verse así:
r={sub,obj,act}
Policy
Esta definición especifica los nombres de los parámetros y el orden requerido por la función de coincidencia de control de acceso. Define el modelo para la estrategia de acceso.
Especifica el nombre y el orden de los campos en el documento de regla de Política.
Por ejemplo:
Matcher
p={sub, obj, act}
o p={sub, obj, act, eft}
Nota: Si eft (resultado de la política) no está definido, el campo del resultado en el archivo de política no se leerá, y el resultado de la política coincidente se permitirá por defecto. Define las reglas de coincidencia para la Solicitud y la Política.
Effect
Por ejemplo: m = r.sub == p.sub && r.act == p.act && r.obj == p.obj
Esta regla de coincidencia simple y común significa que si los parámetros solicitados (entidades, recursos y métodos) son iguales a los encontrados en la política, entonces se devuelve el resultado de la política (p.eft
).
El resultado de la estrategia se guardará en p.eft
.
Realiza un juicio de combinación lógica sobre los resultados de coincidencia de Coincidencias.
Por ejemplo: e = some(where(p.eft == allow))
Esta declaración significa que si el resultado de la estrategia de coincidencia p.eft
tiene el resultado de (algún) permitir, entonces el resultado final es verdadero. Veamos otro ejemplo: e = some(where (p.eft == allow)) && !some(where (p.eft == deny))
El significado lógico de esta combinación de ejemplo es: si hay una estrategia que coincide con el resultado de permitir y ninguna estrategia que coincida con el resultado de denegar, el resultado es verdadero. En otras palabras, es verdadero cuando las estrategias de coincidencia son todas de permitir.
# Request definition
[request_definition]
r = sub, obj, act
# Policy definition
[policy_definition]
p = sub, obj, act
# Policy effect
[policy_effect]
e = some(where (p.eft == allow))
# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
Si hay algún denegar, ambos son falsos (más simplemente, cuando permitir y denegar existen al mismo tiempo, la denegación tiene prioridad).
p, alice, data1, read
p, bob, data2, write
El modelo más básico y simple en Casbin es ACL.
- El modelo CONF para ACL es el siguiente:
- Un ejemplo de política para el modelo ACL es:
Esto significa:
# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj \
&& r.act == p.act
alice puede leer data1
# Matchers
[matchers]
m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')
También admitimos el modo de múltiples líneas agregando '' al final:
bob puede escribir data2