
Casbin4d es una implementación de plataforma cruzada (Firemonkey) para Delphi/Pascal de la popular biblioteca de autorización Casbin. Proporciona soporte para hacer cumplir la autorización basada en varios modelos de control de acceso.
Está cordialmente invitado a compartir, bifurcarse, revisar y mejorar esta biblioteca. No dude en comentar y ofrecer sugerencias. Si desea contribuir, consulte primero la página wiki para los desarrolladores
| Casbina | jcasbin | node-casbín | Php-casbin |
| preparado para la producción | preparado para la producción | preparado para la producción | preparado para la producción |
![]() | |||
|---|---|---|---|
| Picasbín | Casbin4d | Red | Casbin-RS |
| preparado para la producción | experimental | preparado para la producción | preparado para la producción |
write-article , read-log . No controla el acceso a un artículo o registro específico.resource.Owner se puede usar para obtener el atributo de un recurso./res/* , /res/:id y HTTP como GET , POST , PUT , DELETE .En Casbin, un modelo de control de acceso se abstrae en un archivo conf base en el metamodelo permanente (política, efecto, solicitud, combate) . Por lo tanto, cambiar o actualizar el mecanismo de autorización para un proyecto es tan simple como modificar una configuración. Puede personalizar su propio modelo de control de acceso combinando los modelos disponibles. Por ejemplo, puede obtener roles RBAC y atributos ABAC juntos dentro de un modelo y compartir un conjunto de reglas de política.
El modelo más básico y simple de Casbin es ACL. El modelo Conf de ACL se ve así:
# 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
La configuración anterior sigue el idioma GO.
Casbin4d lo entiende, pero también puede usar el estilo típico de Delphi/Pascal:
...
[matchers]
m = r.sub = p.sub and r.obj = p.sub and r.act = p.act
Una política de ejemplo para el modelo ACL es como:
p, alice, data1, read
p, bob, data2, write
Para Casbin esto significa que:
Luego, en su aplicación, instanciar un nuevo objeto Casbin (interfacido) y pasar los archivos requeridos:
var
casbin: ICasbin;
begin
casbin:=TCasbin.Create ('model.conf', 'policies.csv');
...
end
y, finalmente, prueba (aplique) una afirmación:
...
if casbin.enforce(['alice,data1,read']) then
// Alice is super happy as she can read data1
else
// Alice is sad
...
Lo que hace Casbin:
{subject, object, action} o un formulario personalizado como usted definió, tanto permiten y denegan las autorizaciones.root o administrator . Un superusador puede hacer cualquier cosa sin permisos de explicación.keyMatch puede asignar una clave de recurso /foo/bar al patrón /foo*Lo que Casbin no hace:
username y password cuando un usuario inicia sesión)Casbin4d viene en un paquete (actualmente para Delphi 10.3 Rio) y puede instalarlo en el IDE. Sin embargo, no hay componentes visuales, lo que significa que puede usar las unidades independientemente de los paquetes. Simplemente importe las unidades en su proyecto (suponiendo que no le importe el número de ellas)
Por favor vea las páginas wiki
También puede usar el editor en línea (http://casbin.org/editor/) para escribir su modelo y política de Casbin en su navegador web. Proporciona funcionalidad, como syntax highlighting y code completion , al igual que un IDE para un lenguaje de programación.
También puede usar la demostración principal para probar los scripts y las afirmaciones. Ver las demostraciones
Vea la carpeta Demos. La carpeta de ejemplos contiene la configuración de ejemplo y los archivos de política de la implementación de GO original
La demostración principal está en Demos/Carpeta principal. También puede encontrar un archivo ejecutable en esta carpeta para que pueda descargarlo y probar Casbin4d

Consulte la documentación
Casbin4d proporciona un punto de acceso para administrar los permisos a través del ipolicymanager. Si está familiarizado con otras implementaciones, notará que tienen dos conjuntos de API (API de gestión y API RBAC). Esta implementación los combina a ambos bajo el gerente de políticas
En Casbin4d, el almacenamiento de políticas se abstrae a través del concepto del adaptador. El consumidor de Casbin4d es libre de implementar la gestión del almacenamiento de políticas como consideran adecuado para sus necesidades. Por conveniencia, Casbin4D proporciona dos adaptadores: uno para archivos de texto (.CSV) y un adaptador de memoria. Eres bienvenido (e invitado) a contribuir con los nuevos adaptadores con un uso más amplio. Por favor háganos saber
Casbin4d está diseñado con múltiples subprocesos en mente. La implementación actual logra esto a nivel de ejecución
Hay un proyecto de referencia ubicado en la carpeta de puntos de referencia que prueba la aplicación de políticas.
El proyecto se ejecutó en la siguiente máquina/instalación:
* Dell XPS 15 9560: Intel(R) Core(TM) i7-7700HQ CPU @2.80GHz, 2801MHz, 4 Core(s), 8 Logical Processor(s)
* Windows: Windows 10 Pro 64-bit, 10.0.16299 Build 16299
Los resultados se muestran en la siguiente tabla. La sobrecarga de tiempo se calcula por operación (OP) que representa una sola llamada a TCasbin.enforce[..]
| Caso de prueba | Tamaño | Tiempo por encima | Sobrecarga de memoria |
|---|---|---|---|
| Impedir en bruto | 2 reglas (2 usuarios) | 0.000090 seg/OP | 0 KB |
| Modelo básico | 2 reglas (2 usuarios) | 0.000466 seg/OP | 432 b |
| RBAC | 5 reglas (2 usuarios, 1 rol) | 0.000872 seg/OP | 352 b |
| RBAC (pequeño) | 1,100 reglas (1,000 usuarios, 100 roles) | 0.238945 segundos/OP | 1.49 MB |
| RBAC (medio) | 11,000 reglas (10,000 usuarios, 1,000 roles) | 9.745707 Sec/OP | 15.7 MB |
| RBAC (con roles de recursos) | 6 reglas (2 usuarios, 2 roles) | 0.000658 seg/OP | 352 b |
| RBAC (con dominios/inquilinos) | 6 reglas (2 usuarios, 1 rol, 2 dominios) | 0.000670 segundos/OP | 352 b |
| RBAC (con negar) | 6 reglas (2 usuarios, 1 rol) | 0.001260 segundos/OP | 380 b |
| Abacero | 0 reglas (0 usuarios) | 0.000181 seg/OP | 120 B |
| Keymatch | 2 reglas (2 usuarios) | 0.000782 seg/OP | 352 b |
| Prioridad | 9 reglas (2 usuarios, 2 roles) | 0.001124 seg/OP | 380 b |
| Modelo | Archivo modelo | Archivo de políticas |
|---|---|---|
| LCA | Basic_model.conf | Basic_policy.csv |
| ACL con Superuser | Basic_model_with_root.conf | Basic_policy.csv |
| ACL sin usuarios | Basic_model_without_users.conf | Basic_policy_without_users.csv |
| ACL sin recursos | Basic_model_without_resources.conf | Basic_policy_without_resources.csv |
| RBAC | rbac_model.conf | rbac_policy.csv |
| RBAC con roles de recursos | rbac_model_with_resource_roles.conf | rbac_policy_with_resource_roles.csv |
| RBAC con dominios/inquilinos | rbac_model_with_domains.conf | rbac_policy_with_domains.csv |
| Abacero | abac_model.conf | N / A |
| Sosegado | kymatch_model.conf | kymatch_policy.csv |
| Negar la sobremesa | rbac_model_with_deny.conf | rbac_policy_with_deny.csv |
| Prioridad | priority_model.conf | priority_policy.csv |
La gran mayoría de las pruebas de la implementación original en GO se han importado en Delphi. Consulte las pruebas
Puede consultar la cobertura del código aquí para el estado actualizado. Puede mejorar las pruebas y la cobertura
Este proyecto tiene licencia bajo la licencia Apache 2.0.
Si tiene algún problema o solicitud de función, contáctenos. PR es bienvenido