Model Storage
Im Gegensatz zur Richtlinie kann das Modell nur geladen werden, es kann nicht gespeichert werden. Wir sind der Meinung, dass das Modell kein dynamischer Bestandteil ist und nicht zur Laufzeit geändert werden sollte, daher haben wir keine API implementiert, um das Modell im Speicher zu speichern.
Es gibt jedoch gute Nachrichten. Wir bieten drei gleichwertige Möglichkeiten, ein Modell statisch oder dynamisch zu laden:
Modell aus .CONF-Datei laden
Dies ist die gebräuchlichste Methode, um Casbin zu verwenden. Es ist leicht zu verstehen für Anfänger und praktisch zum Teilen, wenn Sie Hilfe vom Casbin-Team benötigen.
Der Inhalt der .CONF
-Datei examples/rbac_model.conf ist wie folgt:
[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
Dann können Sie die Modell-Datei wie folgt laden:
e := casbin.NewEnforcer("examples/rbac_model.conf", "examples/rbac_policy.csv")
Modell aus Code laden
Das Modell kann dynamisch aus dem Code anstelle einer .CONF
-Datei initialisiert werden. Hier ist ein Beispiel für das RBAC-Modell:
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)
Modell aus String laden
Alternativ können Sie den gesamten Modelltext aus einem mehrzeiligen String laden. Der Vorteil dieser Methode ist, dass Sie keine Modell-Datei pflegen müssen.
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)