Model Storage
Politikadan farklı olarak, model sadece yüklenebilir, kaydedilemez. Modelin dinamik bir bileşen olmadığına ve çalışma zamanında değiştirilmemesi gerektiğine inanıyoruz, bu yüzden modeli depolamaya kaydetmek için bir API uygulamadık.
Ancak iyi haberler var. Bir modeli statik veya dinamik olarak yüklemek için üç eşdeğer yol sunuyoruz:
Modeli .CONF dosyasından yükle
Bu, Casbin'i kullanmanın en yaygın yoludur. Başlangıç seviyesi kullanıcılar için anlaşılması kolaydır ve Casbin ekibinden yardım almanız gerektiğinde paylaşım açısından uygundur.
.CONF
dosyasının içeriği examples/rbac_model.conf şu şekildedir:
[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
Ardından model dosyasını şu şekilde yükleyebilirsiniz:
e := casbin.NewEnforcer("examples/rbac_model.conf", "examples/rbac_policy.csv")
Koddan model yükle
Model, bir .CONF
dosyası kullanmak yerine koddan dinamik olarak başlatılabilir. İşte RBAC modeli için bir örnek:
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)
Dizeden model yükle
Alternatif olarak, tüm model metnini çok satırlı bir dizeden yükleyebilirsiniz. Bu yaklaşımın avantajı, bir model dosyasını sürdürmenize gerek olmamasıdır.
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)