Zum Hauptinhalt springen

Get Started

Installation

go get github.com/casbin/casbin/v2

Neuen Casbin Enforcer erstellen

Casbin verwendet Konfigurationsdateien, um das Zugriffskontrollmodell zu definieren.

Es gibt zwei Konfigurationsdateien: model.conf und policy.csv. model.conf speichert das Zugriffsmodell, während policy.csv die spezifische Benutzerberechtigungskonfiguration speichert. Die Verwendung von Casbin ist sehr einfach. Wir müssen nur eine Hauptstruktur erstellen: Enforcer. Beim Erstellen dieser Struktur werden model.conf und policy.csv geladen.

Mit anderen Worten, um einen Casbin Enforcer zu erstellen, müssen Sie ein Model und einen Adapter bereitstellen.

Casbin bietet einen FileAdapter, den Sie verwenden können. Siehe Adapter für weitere Informationen.

  • Beispiel für die Verwendung der Modelldatei und des standardmäßigen FileAdapter:
import "github.com/casbin/casbin/v2"

e, err := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
  • Verwenden Sie den Modeltext mit einem anderen Adapter:
import (
"log"

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

// Initialize a Xorm adapter with MySQL database.
a, err := xormadapter.NewAdapter("mysql", "mysql_username:mysql_password@tcp(127.0.0.1:3306)/")
if err != nil {
log.Fatalf("error: adapter: %s", err)
}

m, err := model.NewModelFromString(`
[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
`)
if err != nil {
log.Fatalf("error: model: %s", err)
}

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

Berechtigungen prüfen

Fügen Sie einen Durchsetzungshaken in Ihren Code ein, kurz bevor der Zugriff erfolgt:

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"}})

Casbin bietet auch eine API für die Berechtigungsverwaltung zur Laufzeit. Zum Beispiel können Sie alle Rollen, die einem Benutzer zugewiesen sind, wie folgt abrufen:

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

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

Bitte beziehen Sie sich auf die Testfälle für weitere Nutzung.