Bỏ qua đến nội dung chính

Get Started

Cài đặt

go get github.com/casbin/casbin/v2

Tạo một enforcer Casbin mới

Casbin sử dụng các tệp cấu hình để định nghĩa mô hình kiểm soát truy cập.

Có hai tệp cấu hình: model.confpolicy.csv. model.conf lưu trữ mô hình truy cập, trong khi policy.csv lưu trữ cấu hình quyền cụ thể của người dùng. Việc sử dụng Casbin rất đơn giản. Chúng ta chỉ cần tạo một cấu trúc chính: enforcer. Khi xây dựng cấu trúc này, model.confpolicy.csv sẽ được tải.

Nói cách khác, để tạo một enforcer Casbin, bạn cần cung cấp một Model và một Adapter.

Casbin cung cấp một FileAdapter mà bạn có thể sử dụng. Xem Adapter để biết thêm thông tin.

  • Ví dụ về việc sử dụng tệp Model và FileAdapter mặc định:
import "github.com/casbin/casbin/v2"

e, err := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
  • Sử dụng văn bản Model với Adapter khác:
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)
}

Kiểm tra quyền

Thêm một hook thực thi vào mã của bạn ngay trước khi truy cập xảy ra:

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 cũng cung cấp API để quản lý quyền hạn tại thời điểm chạy. Ví dụ, bạn có thể lấy tất cả các vai trò được gán cho một người dùng như sau:

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

Xem Management APIRBAC API để biết thêm cách sử dụng.

Vui lòng tham khảo các trường hợp kiểm thử để biết thêm cách sử dụng.