Heim  >  Artikel  >  Web-Frontend  >  Erfahren Sie mehr über Node.js Casbin

Erfahren Sie mehr über Node.js Casbin

青灯夜游
青灯夜游nach vorne
2020-08-19 10:16:452775Durchsuche

Erfahren Sie mehr über Node.js Casbin

【Video-Tutorial-Empfehlung: nodejs-Tutorial

Übersicht

Casbin ist ein leistungsstarkes und effizientes Open-Source-Zugriffskontroll-Framework, und sein Berechtigungsverwaltungsmechanismus unterstützt mehrere Zugriffskontrollmodelle.

Was ist Casbin?

Casbin kann:

  • Benutzerdefiniertes Anfrageformat unterstützen, das Standardanfrageformat ist {Betreff, Objekt, Aktion}.
  • Es verfügt über zwei Kernkonzepte: Modell und Richtlinie für das Zugriffskontrollmodell.
  • Unterstützt die mehrstufige Rollenvererbung in RBAC. Nicht nur Subjekte können Rollen haben, sondern auch Ressourcen können Rollen haben.
  • Unterstützt Superuser wie Root oder Administrator, die auf alle Ressourcen zugreifen können, ohne durch Autorisierungsrichtlinien eingeschränkt zu werden.
  • Unterstützt eine Vielzahl integrierter Operatoren, wie z. B. keyMatch, um die Verwaltung pfadbasierter Ressourcen zu erleichtern, z. B. /foo/bar kann auf /foo* abgebildet werden.

Casbin kann nicht:

  • Identitätsauthentifizierung (dh Überprüfung des Benutzernamens und des Kennworts des Benutzers). Casbin ist nur für die Zugriffskontrolle verantwortlich. Es sollten andere spezialisierte Komponenten für die Identitätsauthentifizierung verantwortlich sein, und dann sollte Casbin die Zugriffskontrolle durchführen. Die beiden arbeiten zusammen.
  • Benutzerliste oder Rollenliste verwalten. Casbin ist der Ansicht, dass es angemessener ist, dass das Projekt selbst die Benutzer- und Rollenlisten verwaltet. Benutzer haben normalerweise ihre Passwörter, Casbin ist jedoch nicht als Container zum Speichern von Passwörtern konzipiert. Stattdessen wird die Zuordnungsbeziehung zwischen Benutzern und Rollen im RBAC-Schema gespeichert.

Dokumentation

casbin.org/docs/en/overview

Installation

# NPMnpm install casbin --save# Yarnyarn add casbin

Erste Schritte

Erstellen eines Casbin Enforcer erfordert eine Modelldatei und eine Richtliniendatei als Parameter :

import { newEnforcer } from 'casbin';const enforcer = await newEnforcer('basic_model.conf', 'basic_policy.csv');

Sie können den Enforcer auch mit der Richtlinie in der Datenbank statt mit der Datei initialisieren, siehe Adapter für Details.

const sub = 'alice'; // 想要访问资源的用户。const obj = 'data1'; // 将要访问的资源。const act = 'read'; // 用户对资源执行的操作。const res = await enforcer.enforce(sub, obj, act);if (res) {
  // 允许 alice 读取数据1} else {
  // 拒绝请求,显示错误}

Neben statischen Richtliniendateien bietet node-casbin auch eine API für die Berechtigungsverwaltung zur Laufzeit. So können Sie beispielsweise alle Rollen einem Benutzer wie folgt zuweisen:

const roles = await enforcer.getRolesForUser('alice');

Weitere Informationen finden Sie unter Management API und RBAC API Verwendungsmöglichkeiten.

Wie es funktioniert

In Casbin wird das Zugriffskontrollmodell in eine Datei abstrahiert, die auf PERM (Policy, Effect, Request, Matcher) basiert. Daher ist das Ändern oder Aktualisieren des Autorisierungsmechanismus eines Projekts so einfach wie das Ändern der Konfiguration. Sie können Ihr eigenes Zugangskontrollmodell anpassen, indem Sie die verfügbaren Modelle kombinieren. Beispielsweise können Sie RBAC-Rollen und ABAC-Attribute in einem Modell haben und einen Satz Richtlinienregeln gemeinsam nutzen.

Das grundlegendste und einfachste Modell in Casbin ist ACL. Die Modell-CONF in ACL lautet:

# 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

Die Beispielrichtlinie des ACL-Modells lautet wie folgt:

p, alice, data1, read
p, bob, data2, write

Das bedeutet:

  • alice kann Daten lesen1
  • bob kann Daten2 schreiben
    Für eine zu lange einzeilige Konfiguration können Sie dies tun Übergeben Sie außerdem „Add ''“ am Ende, um die Zeile zu unterbrechen:
# Matchers[matchers]m = r.sub == p.sub && r.obj == p.obj \ 
  && r.act == p.act

Darüber hinaus können Sie für ABAC die folgende (noch nicht von jCasbin und Node-Casbin unterstützte) Operation in der Casbin-Golang-Version ausprobieren:

# Matchers[matchers]m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')

Sie sollten jedoch sicherstellen, dass die Länge des Arrays größer als 1 ist, sonst kommt es zu Panik.

Für weitere Operationen können Sie sich govaluate ansehen.

Weitere Kenntnisse zum Thema Programmierung finden Sie unter: Einführung in die Programmierung! !

Das obige ist der detaillierte Inhalt vonErfahren Sie mehr über Node.js Casbin. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen