Casbin

Casbin

  • Texte
  • API
  • Redakteur
  • IDE-Plugins
  • Single Sign-On (SSO)
  • Forum
  • Hilfe
  • Blog
  • Pricing
  • Contact Sales
  • Languages iconDeutsch
    • English
    • 中文
    • 한국어
    • Русский
    • Français
    • 日本語
    • Helfen Sie zu übersetzen
  • GitHub

›Die Grundlagen

Die Grundlagen

  • Übersicht
  • Los geht's
  • So funktioniert es
  • Anleitungen

Modell

  • Unterstützte Modelle
  • Syntax für Modelle
  • Effektor
  • Funktion
  • RBAC
  • RBAC with Pattern
  • RBAC mit Domänen
  • Casbin RBAC v.s. RBAC96
  • ABAC
  • Prioritätsmodell
  • Super-Admin

Speicher

  • Modellspeicher
  • Richtlinien-Speicher
  • Richtlinien-Untermengenladen

Erweiterungen

  • Enforcers
  • Adapter
  • Beobachter
  • Dispatcher
  • Rollen-Manager
  • Middleware
  • GraphQL Middlewares
  • Cloud Native Middlewares

API

  • API-Übersicht
  • Management-API
  • RBAC API
  • RBAC mit Domains API
  • Rollen-Manager-API
  • Datenberechtigungen

Erweiterte Nutzung

  • Mehrfachfachen
  • Benchmarks
  • Leistungsoptimierung
  • Autorisierung von Kubernetes
  • Genehmigung des Service-Mesh durch den Gesandten

Management

  • Admin-Portal
  • Kasbin-Dienst
  • Log- & Fehlerbehandlung
  • Frontend-Nutzung

Redakteur

  • Online-Editor
  • IDE-Plugins

Mehr

  • Unsere Adopter
  • Mitwirken
  • Datenschutzerklärung
  • Nutzungsbedingungen
Translate

Los geht's

Installation

Go
Java
https://mvnrepository.com/artifact/org.casbin/jcasbin
Node.js
PHP
Python
.NET
Rust
Delphi
Lua
go get github.com/casbin/casbin/v2
<dependency>
<groupId>org.casbin</groupId>
<artifactId>jcasbin</artifactId>
<version>1.x.y</version>
</dependency>
# NPM
npm casbin installieren --save

# Yarn
yarn add casbin

composer.json Ihres Projekts. Dies wird das Paket herunterladen:

Komponist benötigt Kasbin/Kasbin
pip install casbin
dotnet add Paket Casbin.NET
cargo install cargo-edit
cargo add casbin

// If you use async-std as async executor
cargo add async-std

// If you use tokio as async executor
cargo add tokio // make sure you activate its `macros` feature
luarocks casbin installieren  

Wenn Berichtfehler: Ihr Benutzer hat keine Schreibrechte in /usr/local/lib/luarocks/rocks -- Sie können als privilegierter Benutzer laufen lassen oder Ihren lokalen Baum mit --local verwenden. Sie können --local hinter Ihrem Befehl einfügen, um dies zu beheben:

luarocks install casbin --local

Neuer Casbin-Vollstrecker

Casbin verwendet Konfigurationsdateien, um das Zugriffskontrollmodell festzulegen.

Es hat zwei Konfigurationsdateien, model.conf und policy.csv. Unter ihnen speichert model.conf unser Zugriffsmodell und policy.csv speichert unsere spezifische Benutzerberechtigungskonfiguration. Die Nutzung von Casbin ist sehr verfeinert. Im Grunde brauchen wir nur eine Hauptstruktur: Durchsetzer. Beim Bau dieser Struktur werden model.conf und policy.csv geladen.

In einem anderen Wort, um einen Casbin-Vollstrecker neu zu machen, müssen Sie ein -Modell und einen Adapter angeben.

Casbin hat einen FileAdapter, siehe Adapter von mehr Adapter.

  • Verwende die Modelldatei und den Standard FileAdapter:
Go
Java
Node.js
PHP
Python
.NET
Delphi
Rust
Lua
import "github.com/casbin/casbin/v2"

e, err := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
import org.casbin.jcasbin.main.Enforcer;

Enforcer e = new Enforcer("path/zu/model.conf", "path/zu/policy.csv");
{ newEnforcer } von 'casbin' importieren;

const e = warten newEnforcer('path/to/model.conf', 'path/to/policy.csv');
require_once './vendor/autoload.php';

Casbin\Enforcer;

$e = new Enforcer("path/to/model.conf", "path/to/policy.csv");
import casbin

e = casbin.Enforcer("path/to/model.conf", "path/to/policy.csv")
mit NetCasbin; 

var e = new Enforcer("path/to/model.conf", "path/to/policy.csv");
var
casbin: ICasbin;
beginnen
casbin := TCasbin.Create('path/to/model.conf', 'path/to/policy.csv');
...
enden
benutze Casbin::prelude::*;

// Wenn Sie async_td als async executor verwenden
#[cfg(feature = "runtime-async-std")]
#[async_std::main]
async fn main() -> Result<()> {
let mut e = Enforcer::new("path/to/model). onf", "path/to/policy.csv"). warten?;
Ok())
}

// Wenn Sie tokio als async executor verwenden
#[cfg(feature = "runtime-tokio")]
#[tokio::main]
async fn main() -> Result<()> {
let mut e = Enforcer::new("path/to/model). onf", "path/to/policy.csv").await?;
Ok())
}
local Enforcer = require("casbin")
local e = Enforcer:new("path/to/model.conf", "path/to/policy.csv") -- Der Casbin Enforcer
  • Den Modelltext mit einem anderen Adapter verwenden:
Go
Python
import (
"log"

"github.com/casbin/v2"
"github.com/casbin/casbin/v2/model"
xormadapter "github.com/casbin/xorm-adapter/v2"
_ "github.com/go-sql-driver/mysql"
)

// Xorm-Adapter mit MySQL-Datenbank initialisieren.
a, err := xormadapter.NewAdapter("mysql", "mysql_username:mysql_password@tcp(127.0.0. :3306)/casbin")
if err != nil {
log.Fatalf("error: adapter: %s", err)
}

m, err := Modell. ewModelFromString(`
[request_definition]
r = sub, obj, handeln

[policy_definition]
p = sub, obj, handeln

[policy_effect]
e = irgendwann, wo (p. ft == allow))

[matchers]
m = r.sub == p.sub && r.obj == p. bj && r.act == p.act
`
)
if err != nil {
log. atalf("error: model: %s", err)
}

e, err := casbin. ewEnforcer(m, a)
if err != nil {
log.Fatalf("error: enforcer: %s", err)
}
import casbin
import casbin_sqlalchemy_adapter


# Use SQLAlchemy Casbin adapter with SQLLite DB
adapter = casbin_sqlalchemy_adapter.Adapter('sqlite:///test.db')

# Create a config model policy
with open("rbac_example_model.conf", "w") as f:
f.write("""
[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
"""
)

# Create enforcer from adapter and config policy
e = casbin.Enforcer('rbac_example_model.conf', adapter)

Berechtigungen überprüfen

Fügen Sie einen Strafverfolgungshaken direkt vor dem Zugriff in Ihren Code ein:

Go
Java
Node.js
PHP
Python
.NET
Delphi
Rust
Lua
sub := "alice" // the user that wants to access a resource.
obj := "data1" // the resource that is going to be accessed.
act := "read" // the operation that the user performs on the resource.

ok, err := e.Enforce(sub, obj, act)

if err != nil {
// handle err
}

if ok == true {
// permit alice to read data1
} else {
// deny the request, show an error
}

// You could use BatchEnforce() to enforce some requests in batches.
// This method returns a bool slice, and this slice's index corresponds to the row index of the two-dimensional array.
// e.g. results[0] is the result of {"alice", "data1", "read"}
results, err := e.BatchEnforce([][]interface{}{{"alice", "data1", "read"}, {"bob", "data2", "write"}, {"jack", "data3", "read"}})
String sub = "alice"; // the user that wants to access a resource.
String obj = "data1"; // the resource that is going to be accessed.
String act = "read"; // the operation that the user performs on the resource.

if (e.enforce(sub, obj, act) == true) {
// permit alice to read data1
} else {
// deny the request, show an error
}
const sub = 'alice'; // the user that wants to access a resource.
const obj = 'data1'; // the resource that is going to be accessed.
const act = 'read'; // the operation that the user performs on the resource.

if ((await e.enforce(sub, obj, act)) === true) {
// permit alice to read data1
} else {
// deny the request, show an error
}
$sub = "alice"; // the user that wants to access a resource.
$obj = "data1"; // the resource that is going to be accessed.
$act = "read"; // the operation that the user performs on the resource.

if ($e->enforce($sub, $obj, $act) === true) {
// permit alice to read data1
} else {
// deny the request, show an error
}
sub = "alice"  # the user that wants to access a resource.
obj = "data1" # the resource that is going to be accessed.
act = "read" # the operation that the user performs on the resource.

if e.enforce(sub, obj, act):
# permit alice to read data1
pass
else:
# deny the request, show an error
pass
var sub = "alice";  # the user that wants to access a resource.
var obj = "data1"; # the resource that is going to be accessed.
var act = "read"; # the operation that the user performs on the resource.

if (await e.EnforceAsync(sub, obj, act))
{
// permit alice to read data1
}
else
{
// deny the request, show an error
}
if casbin.enforce(['alice,data1,read']) then
// Alice is super happy as she can read data1
else
// Alice is sad
  let sub = "alice"; // the user that wants to access a resource.
let obj = "data1"; // the resource that is going to be accessed.
let act = "read"; // the operation that the user performs on the resource.

if e.enforce((sub, obj, act)).await? {
// permit alice to read data1
} else {
// error occurs
}
if e:enforce("alice", "data1", "read") then
-- permit alice to read data1
else
-- deny the request, show an error
end

Casbin stellt auch die API für die Verwaltung von Berechtigungen zur Laufzeit zur Verfügung. Zum Beispiel können Sie alle Rollen einem Benutzer wie unten zugewiesen bekommen:

Go
Java
Node.js
PHP
Python
.NET
Delphi
Rust
Lua
roles, err := e.GetRolesForUser("alice")
Roles roles = e.getRolesForUser("alice");
const roles = await e.getRolesForUser('alice');
$roles = $e->getRolesForUser("alice");
roles = e.get_roles_for_user("alice")
var roles = e.GetRolesForUser("alice");
roles = e.rolesForEntity("alice")
let roles = e.get_roles_for_user("alice");
local roles = e:GetRolesForUser("alice")

Siehe Management API und RBAC API für mehr Nutzung.

Bitte beachten Sie die Testfälle für mehr Verwendung.

← ÜbersichtSo funktioniert es →
  • Installation
  • Neuer Casbin-Vollstrecker
    • Berechtigungen überprüfen
Casbin
Docs
Getting StartedManagement APIRBAC APIMiddlewares
Community
Who's using Casbin?Stack Overflow
Casbin          jCasbin
Node-Casbin   PHP-CasbinPyCasbin          Casbin.NETCasbin-CPP        Casbin-RS
Follow @casbinHQ
Copyright © 2022 Casbin Organization