Langkau ke kandungan utama

Model Storage

Tidak seperti dasar, model hanya boleh dimuatkan, ia tidak boleh disimpan. Kami percaya bahawa model bukanlah komponen dinamik dan tidak sepatutnya diubah pada waktu runtime, oleh itu kami belum melaksanakan API untuk menyimpan model ke dalam storan.

Walau bagaimanapun, ada berita baik. Kami menyediakan tiga cara yang setara untuk memuatkan model, sama ada secara statik atau dinamik:

Muat model dari fail .CONF

Ini adalah cara yang paling biasa digunakan dalam Casbin. Ia mudah difahami bagi pemula dan mudah untuk dikongsi apabila anda memerlukan bantuan dari pasukan Casbin.

Kandungan fail .CONF examples/rbac_model.conf adalah seperti berikut:

[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

Kemudian anda boleh memuatkan fail model seperti berikut:

e := casbin.NewEnforcer("examples/rbac_model.conf", "examples/rbac_policy.csv")

Muat model dari kod

Model boleh diinisialisasi secara dinamik dari kod dan bukannya menggunakan fail .CONF. Berikut adalah contoh untuk model RBAC:

import (
"github.com/casbin/casbin/v2"
"github.com/casbin/casbin/v2/model"
"github.com/casbin/casbin/v2/persist/file-adapter"
)

// Initialize the model from Go code.
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)

Muat model dari rentetan

Sebagai alternatif, anda boleh memuatkan seluruh teks model dari rentetan berbilang baris. Kelebihan pendekatan ini ialah anda tidak perlu mengekalkan fail model.

import (
"github.com/casbin/casbin/v2"
"github.com/casbin/casbin/v2/model"
)

// Initialize the model from a string.
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)