ข้ามไปยังเนื้อหาหลัก

Get Started

การติดตั้ง

go get github.com/casbin/casbin/v2

สร้าง Casbin enforcer ใหม่

Casbin ใช้ไฟล์การกำหนดค่าเพื่อกำหนดโมเดลการควบคุมการเข้าถึง

มีไฟล์การกำหนดค่าสองไฟล์: model.conf และ policy.csv. model.conf เก็บโมเดลการเข้าถึง ขณะที่ policy.csv เก็บการกำหนดค่าสิทธิ์ผู้ใช้เฉพาะ การใช้งาน Casbin นั้นง่ายมาก เราเพียงต้องการสร้างโครงสร้างหลักเพียงอย่างเดียว: enforcer. เมื่อสร้างโครงสร้างนี้ model.conf และ policy.csv จะถูกโหลด

กล่าวอีกนัยหนึ่ง ในการสร้าง Casbin enforcer คุณต้องการให้มี Model และ Adapter.

Casbin มี FileAdapter ที่คุณสามารถใช้ได้ ดู Adapter เพื่อข้อมูลเพิ่มเติม

  • ตัวอย่างการใช้ไฟล์ Model และ FileAdapter ที่เป็นค่าเริ่มต้น:
import "github.com/casbin/casbin/v2"

e, err := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
  • ใช้ข้อความ Model กับ 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)
}

ตรวจสอบสิทธิ์

เพิ่มตะขอการบังคับใช้ลงในโค้ดของคุณก่อนที่การเข้าถึงจะเกิดขึ้น:

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 ยังมี API สำหรับการจัดการสิทธิ์ในระหว่างที่รันไทม์ ตัวอย่างเช่น คุณสามารถรับบทบาททั้งหมดที่ได้รับมอบหมายให้กับผู้ใช้ได้ดังนี้:

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

ดู Management API และ RBAC API เพื่อการใช้งานเพิ่มเติม

โปรดดูที่กรณีทดสอบเพื่อการใช้งานเพิ่มเติม