[Recommandation du didacticiel vidéo : Tutoriel nodejs ]
Présentation
Casbin est un framework de contrôle d'accès open source puissant et efficace. Son mécanisme de gestion des autorisations prend en charge plusieurs modèles de contrôle d'accès.
Qu'est-ce que Casbin ?
Casbin peut :
- Prend en charge le format de demande personnalisé, le format de demande par défaut est {sujet, objet, action} .
- Il comporte deux concepts fondamentaux : le modèle de contrôle d'accès et la politique.
- Prend en charge l'héritage de rôles à plusieurs niveaux dans RBAC. Non seulement les sujets peuvent avoir des rôles, mais les ressources peuvent également avoir des rôles.
- Prend en charge les super utilisateurs, tels que root ou administrateur, qui peuvent accéder à toutes les ressources sans être limités par les politiques d'autorisation.
- prend en charge une variété d'opérateurs intégrés, tels que keyMatch, pour faciliter la gestion des ressources basées sur le chemin. Par exemple, /foo/bar peut être mappé à /foo*
<.>
Casbin ne peut pas :
Authentification de l'identité (c'est-à-dire vérifier le nom d'utilisateur et le mot de passe de l'utilisateur), casbin est uniquement responsable du contrôle d'accès. Il devrait y avoir d'autres composants spécialisés responsables de l'authentification de l'identité, puis casbin devrait effectuer le contrôle d'accès. Les deux fonctionnent ensemble. - Gérer la liste d'utilisateurs ou la liste de rôles. Casbin estime qu'il est plus approprié que le projet lui-même gère les listes d'utilisateurs et de rôles. Les utilisateurs ont généralement leurs mots de passe, mais Casbin n'est pas conçu pour être un conteneur de stockage de mots de passe. Au lieu de cela, il stocke la relation de mappage entre les utilisateurs et les rôles dans le schéma RBAC.
-
Documentation
casbin.org/docs/en/overview
Installer# NPMnpm install casbin --save# Yarnyarn add casbin
Copier après la connexion
Démarrer
La création de l'application Casbin nécessite un fichier de modèle et un fichier de stratégie comme paramètres :
import { newEnforcer } from 'casbin';const enforcer = await newEnforcer('basic_model.conf', 'basic_policy.csv');
Copier après la connexion
Vous pouvez également initialiser l'applicateur avec la stratégie dans la base de données au lieu du fichier, voir Adaptateurs pour plus de détails.
const sub = 'alice'; // 想要访问资源的用户。const obj = 'data1'; // 将要访问的资源。const act = 'read'; // 用户对资源执行的操作。const res = await enforcer.enforce(sub, obj, act);if (res) {
// 允许 alice 读取数据1} else {
// 拒绝请求,显示错误}
Copier après la connexion
En plus des fichiers de stratégie statiques,
fournit également des API pour la gestion des autorisations au moment de l'exécution. Par exemple, vous pouvez obtenir tous les rôles attribués à un utilisateur comme suit : node-casbin
const roles = await enforcer.getRolesForUser('alice');
Copier après la connexion
Voir Gestion API et API RBAC pour une utilisation accrue.
Comment ça marche
Dans Casbin, le modèle de contrôle d'accès est résumé dans un fichier basé sur PERM (Policy, Effect, Request, Matcher ) . Par conséquent, changer ou mettre à niveau le mécanisme d’autorisation d’un projet est aussi simple que de modifier la configuration. Vous pouvez personnaliser votre propre modèle de contrôle d'accès en combinant les modèles disponibles. Par exemple, vous pouvez avoir des rôles RBAC et des attributs ABAC dans un seul modèle et partager un ensemble de règles de stratégie.
Le modèle le plus basique et le plus simple de Casbin est ACL. Le modèle CONF dans ACL est :
# 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
Copier après la connexion
L'exemple de politique du modèle ACL est le suivant :
p, alice, data1, read
p, bob, data2, write
Copier après la connexion
Cela signifie :
alice peut lire les données1-
bob can write data2- Pour une configuration trop longue sur une seule ligne, vous pouvez également couper la ligne en ajoutant '' à la fin :
# Matchers[matchers]m = r.sub == p.sub && r.obj == p.obj \
&& r.act == p.act
Copier après la connexion
De plus, pour ABAC, vous pouvez utiliser Version Casbin Golang Essayez l'opération suivante (pas encore prise en charge par jCasbin et Node-Casbin) :
# Matchers[matchers]m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')
Copier après la connexion
Mais vous devez vous assurer que la longueur du tableau est supérieure à
1, sinon ce sera provoquer la panique.
Pour plus d'opérations, vous pouvez consulter govaluate.
Pour plus de connaissances sur la programmation, veuillez visiter :
Introduction à la programmation ! !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!