Langkau ke kandungan utama

Get Started

Pemasangan

go get github.com/casbin/casbin/v2

Buat enforcer Casbin baru

Casbin menggunakan fail konfigurasi untuk menentukan model kawalan akses.

Terdapat dua fail konfigurasi: model.conf dan policy.csv. model.conf menyimpan model akses, manakala policy.csv menyimpan konfigurasi kebenaran pengguna khusus. Penggunaan Casbin sangat mudah. Kita hanya perlu membuat satu struktur utama: enforcer. Apabila membina struktur ini, model.conf dan policy.csv akan dimuatkan.

Dalam erti kata lain, untuk mencipta enforcer Casbin, anda perlu menyediakan Model dan Adapter.

Casbin menyediakan FileAdapter yang boleh anda gunakan. Lihat Adapter untuk maklumat lanjut.

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

e, err := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
  • Gunakan teks Model dengan Adapter lain:
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)
}

Periksa kebenaran

Tambahkan kait penguatkuasaan ke dalam kod anda tepat sebelum akses berlaku:

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 juga menyediakan API untuk pengurusan kebenaran pada waktu berjalan. Sebagai contoh, anda boleh mendapatkan semua peranan yang ditugaskan kepada pengguna seperti di bawah:

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

Lihat Management API dan RBAC API untuk penggunaan lebih lanjut.

Sila rujuk kepada kes-kes ujian untuk penggunaan lebih lanjut.