
O Casbin4D é uma implementação de plataforma cruzada (Firemonkey) para Delphi/Pascal da Popular Authorization Library Casbin. Ele fornece suporte para aplicar a autorização com base em vários modelos de controle de acesso.
Você é cordialmente convidado a compartilhar, forçar, revisar e melhorar esta biblioteca. Sinta -se à vontade para comentar e oferecer sugestões. Se você deseja contribuir, verifique a página do wiki para os desenvolvedores primeiro
| Casbin | JCASBIN | Node-Casbin | Php-casbin |
| Pronto para a produção | Pronto para a produção | Pronto para a produção | Pronto para a produção |
![]() | |||
|---|---|---|---|
| Pycasbina | Casbin4d | Casbin-Net | Casbin-rs |
| Pronto para a produção | experimental | Pronto para a produção | Pronto para a produção |
write-article , read-log . Ele não controla o acesso a um artigo ou log específico.resource.Owner pode ser usado para obter o atributo para um recurso./res/* , /res/:id e http métodos como GET , POST , PUT , DELETE .Em Casbin, um modelo de controle de acesso é abstraído em um arquivo conf baseado no Metamodel Perm (Política, Efeito, Solicitação, Matchers) . Portanto, alternar ou atualizar o mecanismo de autorização para um projeto é tão simples quanto modificar uma configuração. Você pode personalizar seu próprio modelo de controle de acesso combinando os modelos disponíveis. Por exemplo, você pode obter funções de RBAC e atributos ABAC juntos dentro de um modelo e compartilhar um conjunto de regras de política.
O modelo mais básico e mais simples da Casbin é o ACL. O modelo conferl da ACL é assim:
# 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
A configuração acima segue o idioma Go.
Casbin4d entende, mas você também pode usar o estilo típico Delphi/Pascal:
...
[matchers]
m = r.sub = p.sub and r.obj = p.sub and r.act = p.act
Um exemplo de política para o modelo da ACL é como:
p, alice, data1, read
p, bob, data2, write
Para Casbin, isso significa que:
Em seguida, em seu aplicativo instanciam um novo objeto Casbin (interface) e passe os arquivos necessários:
var
casbin: ICasbin;
begin
casbin:=TCasbin.Create ('model.conf', 'policies.csv');
...
end
e, finalmente, teste (execute) uma afirmação:
...
if casbin.enforce(['alice,data1,read']) then
// Alice is super happy as she can read data1
else
// Alice is sad
...
O que Casbin faz:
{subject, object, action} ou um formulário personalizado conforme definido, ambos permitir e negar autorizações são suportadas.root ou administrator . Um superusuário pode fazer qualquer coisa sem explicar permissões.keyMatch pode mapear uma chave de recurso /foo/bar para o padrão /foo*O que Casbin não faz:
username e password quando um usuário efetua login)O Casbin4D vem em um pacote (atualmente para o Delphi 10.3 Rio) e você pode instalá -lo no IDE. No entanto, não há componentes visuais, o que significa que você pode usar as unidades independentemente dos pacotes. Basta importar as unidades em seu projeto (supondo que você não se importe com o número delas)
Por favor, veja as páginas do wiki
Você também pode usar o editor online (http://casbin.org/editor/) para escrever seu modelo e política Casbin no seu navegador da web. Ele fornece funcionalidade como syntax highlighting e code completion , assim como um IDE para uma linguagem de programação.
Você também pode usar a demonstração principal para testar os scripts e as afirmações. Veja as demos
Veja a pasta demos. A pasta Exemplos contém os arquivos de configuração e políticas de exemplo da implementação GO original
A demonstração principal está em demos/pasta principal. Você também pode encontrar um arquivo executável nesta pasta para que você possa baixá -lo e experimentar o casbin4d

Por favor, veja a documentação
O CASBIN4D fornece um ponto de acesso para gerenciar permissões por meio do iPolicyManager. Se você estiver familiarizado com outras implementações, notará que elas têm dois conjuntos de APIs (API de gerenciamento e API RBAC). Esta implementação combina os dois sob o gerente de políticas
Em Casbin4D, o armazenamento de políticas é abstraído através do conceito de adaptador. O consumidor da Casbin4D é gratuito para implementar o gerenciamento do armazenamento de políticas, como acharem adequado às suas necessidades. Por conveniência, o CASBIN4D fornece dois adaptadores: um para arquivos de texto (.csv) e um adaptador de memória. Você é bem -vindo (e convidado) para contribuir com novos adaptadores com uso mais amplo. Por favor nos avise
O Casbin4D foi projetado com várias threading em mente. A implementação atual alcança isso no nível do executor
Existe um projeto de referência localizado na pasta Benchmarks, que testa a aplicação da política.
O projeto foi executado na seguinte máquina/instalação:
* 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
Os resultados são mostrados na tabela a seguir. A sobrecarga de tempo é calculada por operação (OP), que representa uma única chamada para TCasbin.enforce[..]
| Caso de teste | Tamanho | Tempo superior | Sobrecarga de memória |
|---|---|---|---|
| Aplicação crua | 2 regras (2 usuários) | 0,000090 seg/op | 0 kb |
| Modelo básico | 2 regras (2 usuários) | 0,000466 seg/op | 432 b |
| Rbac | 5 regras (2 usuários, 1 função) | 0,000872 seg/op | 352 b |
| RBAC (pequeno) | 1.100 regras (1.000 usuários, 100 funções) | 0,238945 seg/op | 1,49 MB |
| RBAC (médio) | 11.000 regras (10.000 usuários, 1.000 funções) | 9.745707 seg/op | 15,7 MB |
| RBAC (com funções de recurso) | 6 regras (2 usuários, 2 funções) | 0,000658 seg/op | 352 b |
| RBAC (com domínios/inquilinos) | 6 regras (2 usuários, 1 função, 2 domínios) | 0,000670 seg/op | 352 b |
| RBAC (com nega) | 6 regras (2 usuários, 1 função) | 0,001260 seg/op | 380 b |
| ABAC | 0 regras (0 usuários) | 0,000181 seg/op | 120 b |
| Keymatch | 2 regras (2 usuários) | 0,000782 seg/op | 352 b |
| Prioridade | 9 regras (2 usuários, 2 funções) | 0,001124 seg/op | 380 b |
| Modelo | Arquivo de modelo | Arquivo de política |
|---|---|---|
| ACL | Basic_model.conf | Basic_policy.csv |
| ACL com superusuário | Basic_model_with_root.conf | Basic_policy.csv |
| ACL sem usuários | Basic_model_without_users.conf | Basic_policy_without_users.csv |
| ACL sem recursos | Basic_model_without_resources.conf | Basic_policy_without_resources.csv |
| Rbac | rbac_model.conf | rbac_policy.csv |
| RBAC com funções de recurso | rbac_model_with_resource_roles.conf | rbac_policy_with_resource_roles.csv |
| RBAC com domínios/inquilinos | rbac_model_with_domains.conf | rbac_policy_with_domains.csv |
| ABAC | abac_model.conf | N / D |
| Repousante | keymatch_model.conf | keymatch_policy.csv |
| Negar-override | rbac_model_with_deny.conf | rbac_policy_with_deny.csv |
| Prioridade | Priority_model.conf | priority_policy.csv |
A grande maioria dos testes da implementação original em Go foi importada em Delphi. Por favor, veja os testes
Você pode verificar a cobertura do código aqui para obter o status atualizado. Você pode melhorar os testes e a cobertura
Este projeto está licenciado sob a licença Apache 2.0.
Se você tiver algum problema ou solicitações de recursos, entre em contato conosco. PR é bem -vindo