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 has a FileAdapter, see Adapter for more information.

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.