
Casbin4d est une implémentation transformatrice (FiremonKey) pour Delphi / Pascal de la bibliothèque d'autorisation populaire Casbin. Il prend en charge l'application de l'autorisation en fonction de divers modèles de contrôle d'accès.
Vous êtes cordialement invité à partager, à fournir, à examiner et à améliorer cette bibliothèque. N'hésitez pas à commenter et à proposer des suggestions. Si vous souhaitez contribuer, consultez d'abord la page wiki pour les développeurs
| Casbine | jcasbin | nœud-casbin | PHP-CASBIN |
| prêt pour la production | prêt pour la production | prêt pour la production | prêt pour la production |
![]() | |||
|---|---|---|---|
| Pycasbin | Casbin4d | Casbin-net | Casbin-RS |
| prêt pour la production | expérimental | prêt pour la production | prêt pour la production |
write-article , read-log . Il ne contrôle pas l'accès à un article ou un journal spécifique.resource.Owner peut être utilisé pour obtenir l'attribut pour une ressource./res/* , /res/:id et http méthodes comme GET , POST , PUT , DELETE .Dans Casbin, un modèle de contrôle d'accès est abstrait dans un fichier conf basé sur le métamodel PERM (stratégie, effet, demande, matchs) . Ainsi, la commutation ou la mise à niveau du mécanisme d'autorisation d'un projet est tout aussi simple que de modifier une configuration. Vous pouvez personnaliser votre propre modèle de contrôle d'accès en combinant les modèles disponibles. Par exemple, vous pouvez obtenir des rôles RBAC et des attributs ABAC dans un seul modèle et partager un ensemble de règles politiques.
Le modèle le plus basique et le plus simple de Casbin est ACL. Le modèle ACL confe à ceci:
# 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 configuration ci-dessus suit la langue Go.
Casbin4d le comprend mais vous pouvez également utiliser le style typique de Delphi / Pascal:
...
[matchers]
m = r.sub = p.sub and r.obj = p.sub and r.act = p.act
Un exemple de politique pour le modèle ACL est comme:
p, alice, data1, read
p, bob, data2, write
Pour Casbin, cela signifie que:
Ensuite, dans votre application, instanciez un nouvel objet Casbin (interfacé) et passez les fichiers requis:
var
casbin: ICasbin;
begin
casbin:=TCasbin.Create ('model.conf', 'policies.csv');
...
end
et, enfin, tester (appliquer) une affirmation:
...
if casbin.enforce(['alice,data1,read']) then
// Alice is super happy as she can read data1
else
// Alice is sad
...
Ce que fait Casbin:
{subject, object, action} ou une forme personnalisée telle que vous avez défini, les autorisations autorisent et refusent les autorisations.root ou administrator . Un superutilisateur peut tout faire sans expiration des autorisations.keyMatch peut cartographier une clé de ressource /foo/bar sur le motif /foo*Ce que Casbin ne fait pas:
username et password lorsqu'un utilisateur se connecte)Casbin4d est disponible dans un package (actuellement pour Delphi 10.3 Rio) et vous pouvez l'installer dans l'IDE. Cependant, il n'y a pas de composants visuels, ce qui signifie que vous pouvez utiliser les unités indépendamment des packages. Importez simplement les unités de votre projet (en supposant que cela ne vous dérange pas le nombre)
Veuillez consulter les pages wiki
Vous pouvez également utiliser l'éditeur en ligne (http://casbin.org/editor/) pour écrire votre modèle et politique Casbin dans votre navigateur Web. Il fournit des fonctionnalités telles que syntax highlighting et code completion , tout comme un IDE pour un langage de programmation.
Vous pouvez également utiliser la démo principale pour tester les scripts et les assertions. Voir les démos
Voir le dossier Demos. Le dossier Exemples contient l'exemple de configuration et de fichiers de stratégie à partir de l'implémentation d'origine GO
La démo principale est sous les démos / dossier principal. Vous pouvez également trouver un fichier exécutable dans ce dossier afin que vous puissiez le télécharger et essayer Casbin4d

Veuillez consulter la documentation
Casbin4d fournit un point d'accès pour gérer les autorisations via l'iPolicyManager. Si vous connaissez d'autres implémentations, vous remarquerez qu'ils ont deux ensembles d'API (API de gestion et API RBAC). Cette implémentation les combine tous les deux sous le gestionnaire de politiques
Dans Casbin4d, le stockage des politiques est abstrait via le concept de l'adaptateur. Le consommateur de Casbin4d est libre de mettre en œuvre la gestion du stockage des politiques, car ils le jugent appropriés. Pour plus de commodité, Casbin4d fournit deux adaptateurs: un pour les fichiers texte (.csv) et un adaptateur de mémoire. Vous êtes les bienvenus (et invités) à contribuer de nouveaux adaptateurs avec une utilisation plus large. Veuillez nous faire savoir
Casbin4d est conçu en pensant à plusieurs lancers. La mise en œuvre actuelle y parvient au niveau de l'application
Il y a un projet de référence situé dans le dossier Benchmarks qui teste l'application des politiques.
Le projet a été exécuté dans la machine / installation suivante:
* 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
Les résultats sont présentés dans le tableau suivant. La surcharge de temps est calculée par opération (OP) qui représente un seul appel à TCasbin.enforce[..]
| Bilan de test | Taille | Temps aérien | Au-dessus de la mémoire |
|---|---|---|---|
| Forcer de forcer | 2 règles (2 utilisateurs) | 0,000090 Sec / OP | 0 kb |
| Modèle de base | 2 règles (2 utilisateurs) | 0,000466 sec / op | 432 b |
| RBAC | 5 règles (2 utilisateurs, 1 rôle) | 0,000872 sec / op | 352 b |
| RBAC (petit) | 1 100 règles (1 000 utilisateurs, 100 rôles) | 0,238945 sec / op | 1,49 MB |
| RBAC (moyen) | 11 000 règles (10 000 utilisateurs, 1 000 rôles) | 9.745707 SEC / OP | 15,7 Mb |
| RBAC (avec des rôles de ressources) | 6 règles (2 utilisateurs, 2 rôles) | 0,000658 sec / op | 352 b |
| RBAC (avec des domaines / locataires) | 6 règles (2 utilisateurs, 1 rôle, 2 domaines) | 0,000670 sec / op | 352 b |
| RBAC (avec refus) | 6 règles (2 utilisateurs, 1 rôle) | 0,001260 sec / op | 380 b |
| Abac | 0 règles (0 utilisateurs) | 0,000181 sec / op | 120 b |
| Keymatch | 2 règles (2 utilisateurs) | 0,000782 sec / op | 352 b |
| Priorité | 9 règles (2 utilisateurs, 2 rôles) | 0,001124 sec / op | 380 b |
| Modèle | Fichier de modèle | Dossier de stratégie |
|---|---|---|
| ACL | Basic_Model.conf | Basic_policy.csv |
| ACL avec superutilisateur | BASIC_MODEL_WITH_ROOT.CONF | Basic_policy.csv |
| ACL sans utilisateurs | Basic_Model_Without_Users.Conf | Basic_policy_without_users.csv |
| ACL sans ressources | Basic_Model_Without_resources.conf | Basic_policy_without_resources.csv |
| RBAC | RBAC_MODEL.CONF | RBAC_POLICY.CSV |
| RBAC avec des rôles de ressources | rbac_model_with_resource_roles.conf | rbac_policy_with_resource_roles.csv |
| RBAC avec des domaines / locataires | rbac_model_with_domains.conf | RBAC_POLICY_WITH_DOMAINS.csv |
| Abac | abac_model.conf | N / A |
| Reposant | keymatch_model.conf | keymatch_policy.csv |
| Refuser | RBAC_MODEL_WITH_DENY.CONF | RBAC_POLICY_WITH_DENY.CSV |
| Priorité | priority_model.conf | priority_policy.csv |
La grande majorité des tests de l'implémentation d'origine dans GO ont été importés à Delphi. Veuillez consulter les tests
Vous pouvez vérifier la couverture du code ici pour l'état à jour. Vous êtes invités à améliorer les tests et la couverture
Ce projet est concédé sous licence Apache 2.0.
Si vous avez des problèmes ou des demandes de fonctionnalités, veuillez nous contacter. Les relations publiques sont les bienvenus