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

Как начать

Установка

go get github.com/casbin/casbin/v2

Новый силуэт Касбина

Касбин использует конфигурационные файлы для установки модели контроля доступа.

Он имеет два файла конфигурации: model.conf и policy.csv. Среди них model.conf хранит нашу модель доступа, а policy.csv хранит конфигурацию разрешения для конкретного пользователя. Использование Касбина очень изысканно. В основном, нам нужна одна главная структура: энсил. При построении этой структуры будут загружены model.conf и policy.csv.

Другим словом является новый фортепиатель Касбина, вы должны предоставить модель и адаптер.

Casbin has a FileAdapter, see Adapter for more information.

  • Используйте файл модели и по умолчанию FileAdapter:
import "github.com/casbin/casbin/v2"

e, err := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
  • Используйте текст модели с другим адаптером:
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"
)

// Инициализация Xorm адаптера с базой данных MySQL.
a, err := xormadapter.NewAdapter("mysql", "mysql_username:mysql_password@tcp(127.0.0. :3306)/casbin")
if err != nil {
log.Fatalf("error: adapter: %s", err)
}

m, err := model. ewModelFromString(`
[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[policy_effect]
e = some(where (p. ft == allow))

[matchers]
м = r.sub == p.sub && r.obj == p. bj && r.act == p.act
`)
if err != nil {
log. atalf("error: model: %s", err)
}

e, err := casbin. ewEnforcer(m, a)
if err != nil {
log.Fatalf("ошибка: enforcer: %s", err)
}

Проверить права доступа

Добавьте вызов энфорсера в свой код там, где необходимо контролировать доступ:

sub := "alice" // пользователь, который хочет получить доступ к ресурсу.
obj := "data1" // ресурс, доступ к которому запрашивается.
act := "read" // действие, которое совершает пользователь над ресурсом.

ok, err := e. nforce(sub, obj, act)

если err ! nil {
// обработка err
}

if ok == true {
// разрешить alice к чтению данных 1
} else {
// отрицаем запрос, показать ошибку
}

// Вы можете использовать BatchEnforce() для применения некоторых запросов в пакетах.
// Этот метод возвращает маску буля, и этот индекс ломтика соответствует индексу строк двухмерного массива.
// например, результаты[0] — это результат {"alice", "data1", "read"}
results, err := e.BatchEnforce([][][]interface{}{"alice", "data1", "read"}, {"bob", "data2", "write"}, {"jack", "data3", "read"}})

Касбин также предоставляет API для управления разрешениями во время выполнения. Например, вы можете получить все роли, назначенные пользователю как ниже:

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

Смотрите Management API и RBAC API для большего использования.

Вы можете посмотреть на тест кейсы, чтобы увидеть больше примеров использования.