Lewati ke konten utama

Model Storage

Berbeda dengan kebijakan, model hanya dapat dimuat, tidak dapat disimpan. Kami percaya bahwa model bukanlah komponen dinamis dan seharusnya tidak dimodifikasi saat runtime, oleh karena itu kami belum menerapkan API untuk menyimpan model ke dalam penyimpanan.

Namun, ada kabar baik. Kami menyediakan tiga cara yang setara untuk memuat model, baik secara statis maupun dinamis:

Muat model dari file .CONF

Ini adalah cara paling umum untuk menggunakan Casbin. Mudah dipahami bagi pemula dan nyaman untuk dibagikan ketika Anda memerlukan bantuan dari tim Casbin.

Isi dari file .CONF examples/rbac_model.conf adalah sebagai 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 dapat memuat file model sebagai berikut:

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

Muat model dari kode

Model dapat diinisialisasi secara dinamis dari kode alih-alih menggunakan file .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 string

Atau, Anda dapat memuat seluruh teks model dari string multi-baris. Keuntungan dari pendekatan ini adalah Anda tidak perlu memelihara file 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)