Zum Hauptinhalt springen

Los geht's

InstallationÔÇő

go get github.com/casbin/casbin/v2

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.

import "github.com/casbin/casbin/v2"

e, err := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
  • Den Modelltext mit einem anderen Adapter verwenden:
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)
}

Berechtigungen ├╝berpr├╝fenÔÇő

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

sub := "alice" // der Benutzer, der auf eine Ressource zugreifen m├Âchte.
obj := "data1" // die Ressource, auf die zugegriffen werden soll.
act := "read" // die Operation, die der Benutzer auf der Ressource ausf├╝hrt.

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

wenn fehler! nil {
// err
}

if ok == true {
// Erlaube dem Alice das Lesen von data1
} else {
// Anfrage verweigern zeigen einen Fehler
}

// Sie k├Ânnten BatchEnforce() verwenden, um einige Anfragen in Batches zu erzwingen.
// Diese Methode gibt ein bool Slice zur├╝ck und der Slice-Index entspricht dem Datensatzindex des zweidimensionalen Arrays.
// z.B. Ergebnis[0] ist das Ergebnis von {"alice", "data1", "read"}
results, err := e.BatchEnforce([][][]interface{}{{"alice", "data1", "read"}, {"bob", "data2", "write"}, {"jack", "data3", "read"}})

Casbin stellt auch die API f├╝r das Berechtigungsmanagement zur Laufzeit zur Verf├╝gung. Zum Beispiel k├Ânnen Sie alle Rollen einem Benutzer zuweisen wie unten:

roles, err := e.GetRolesForUser("alice")

Siehe Management API und RBAC API f├╝r mehr Nutzung.

Bitte beachten Sie die Testf├Ąlle f├╝r mehr Verwendung.