Модель хранилища
В отличие от политики, модель может быть загружена только тогда, когда она не может быть сохранена. Поскольку мы считаем, что модель не является динамическим компонентом и не должна быть изменена при запуске, так что мы не реализуем API, чтобы сохранить модель в хранилище.
Однако хорошая новость заключается в том, что мы предлагаем три эквивалентных способа либо статической, либо динамической загрузки:
Загрузить модель из .CONF файла
Это самый распространенный способ использования Касбина. Это легко понять для начинающих и удобно для совместного пользования, когда вы спрашиваете команду Casbin за помощью.
Содержимое файла .CONF
examples/rbac_model.conf:
[request_definition]
r = sub, obj, действовать
[policy_definition]
p = sub, obj, act
[role_definition]
g = _, _
[policy_effect]
e = где-то (стр. ft == allow))
[matchers]
m = g(r.sub, p. ub) && r.obj == p.obj && r.act == p.act
Затем вы можете загрузить файл модели как:
e := casbin.NewEnforcer("примеры/rbac_model.conf", "examples/rbac_policy.csv")
Загрузить модель из кода
Модель может быть инициализирована динамически из кода вместо использования файла .CONF
. Вот пример модели RBAC:
import (
"github.com/casbin/casbin/casbin/v2"
"github.com/casbin/casbin/v2/model"
"github.com/casbin/casbin/v2/persist/file-adapter"
)
// Инициализация модели из кода Go.
m := model.NewModel()
m.AddDef("r", "r", "sub, obj, act")
m.AddDef("p", "p", "sub, obj, act")
m.AddDef("g", "_, _")
m.Def("e", "e", "где" (p. ft == allow))")
m.AddDef("m", "g(r.sub, p.sub) && r.obj == p. bj && r.act == p.act")
// Загрузить правила с адаптера файлов .CSV.
// Замените его на адаптер, чтобы избежать файлов.
a := fileadapter.NewAdapter("examples/rbac_policy.csv")
// Создание ссылки.
e := casbin.NewEnforcer(m, a)
Загрузить модель из строки
Или вы можете просто загрузить весь текст модели из многострочной строки. Хорошей точкой для этого является то, что вам не нужно поддерживать модель файла.
import (
"github.com/casbin/casbin/v2"
"github.com/casbin/casbin/v2/model"
)
// Инициализация модели из строки.
текст :=
`
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, act
[role_definition]
g = _, _
[policy_effect]
e = как-то (стр. ft == допустить))
[matchers]
м = g(r.sub, p. ub) && r.obj == p.obj && r.act == p. ct
`
m, _ := model.NewModelFromString(text)
// Загрузить правила политики из CSV файла.
// Замените его на адаптер, чтобы избежать файлов.
a := fileadapter.NewAdapter("examples/rbac_policy.csv")
// Создание ссылки.
e := casbin.NewEnforcer(m, a)