Перейти до основного контенту

Get Started

Інсталяція

go get github.com/casbin/casbin/v2

Створіть новий Casbin примусовий механізм

Casbin використовує конфігураційні файли для визначення моделі контролю доступу.

Є два конфігураційні файли: model.conf та policy.csv. model.conf зберігає модель доступу, тоді як policy.csv зберігає конкретну конфігурацію дозволів користувача. Використання Casbin дуже просте. Нам потрібно створити лише одну основну структуру: enforcer. При створенні цієї структури будуть завантажені model.conf та policy.csv.

Іншими словами, щоб створити Casbin примусовий механізм, вам потрібно надати 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 для більшого використання.

Будь ласка, зверніться до тестових випадків для більшого використання.