Model Storage
Модели в Casbin предназначены только для загрузки: они определяют вашу логику контроля доступа и считаются статическими во время выполнения. Не существует API для сохранения или обновления модели в хранилище.
Вы можете загрузить модель тремя способами:
Загрузка из CONF-файла
Загрузка из .conf файла является стандартным подходом и облегчает обмен моделями и их обсуждение.
Пример: examples/rbac_model.conf
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, act
[role_definition]
g = _, _
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act
Используйте это при создании enforcer:
e := casbin.NewEnforcer("examples/rbac_model.conf", "examples/rbac_policy.csv")
Загрузка из кода
Вы можете создать модель в коде вместо использования файла:
import (
"github.com/casbin/casbin/v3"
"github.com/casbin/casbin/v3/model"
"github.com/casbin/casbin/v3/persist/file-adapter"
)
// Build the model in Go.
m := model.NewModel()
m.AddDef("r", "r", "sub, obj, act")
m.AddDef("p", "p", "sub, obj, act")
m.AddDef("g", "g", "_, _")
m.AddDef("e", "e", "some(where (p.eft == allow))")
m.AddDef("m", "m", "g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act")
// Load the policy rules from the .CSV file adapter.
// Replace it with your adapter to avoid using files.
a := fileadapter.NewAdapter("examples/rbac_policy.csv")
// Create the enforcer.
e := casbin.NewEnforcer(m, a)
Загрузка из строки
Вы также можете загрузить модель из строки (например, из конфигурации или базы данных):
import (
"github.com/casbin/casbin/v3"
"github.com/casbin/casbin/v3/model"
)
// Model text (e.g. from config).
text :=
`
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, act
[role_definition]
g = _, _
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act
`
m, _ := model.NewModelFromString(text)
// Load the policy rules from the .CSV file adapter.
// Replace it with your adapter to avoid using files.
a := fileadapter.NewAdapter("examples/rbac_policy.csv")
// Create the enforcer.
e := casbin.NewEnforcer(m, a)
Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.