Ana içeriğe atla

Get Started

Kurulum

go get github.com/casbin/casbin/v2

Yeni bir Casbin enforcer oluştur

Casbin, erişim kontrol modelini tanımlamak için yapılandırma dosyalarını kullanır.

İki yapılandırma dosyası bulunmaktadır: model.conf ve policy.csv. model.conf, erişim modelini saklarken, policy.csv belirli kullanıcı izin yapılandırmasını saklar. Casbin'in kullanımı çok basittir. Sadece bir ana yapı oluşturmamız gerekiyor: enforcer. Bu yapıyı oluştururken, model.conf ve policy.csv yüklenecektir.

Başka bir deyişle, bir Casbin enforcer oluşturmak için bir Model ve bir Adapter sağlamanız gerekir.

Casbin, kullanabileceğiniz bir FileAdapter sunar. Daha fazla bilgi için Adapter bölümüne bakın.

  • Model dosyasını ve varsayılan FileAdapter kullanma örneği:
import "github.com/casbin/casbin/v2"

e, err := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
  • Model metnini diğer Adapter ile kullanma:
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)
}

İzinleri kontrol etme

Erişim gerçekleşmeden hemen önce kodunuza bir zorlama kancası ekleyin:

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 ayrıca çalışma zamanında izin yönetimi için bir API sağlar. Örneğin, bir kullanıcıya atanan tüm rolleri aşağıdaki gibi alabilirsiniz:

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

Daha fazla kullanım için Yönetim API'si ve RBAC API'si sayfalarına bakın.

Lütfen daha fazla kullanım için test senaryolarına başvurun.