التخطي إلى المحتوى الرئيسي

Model Storage

على عكس السياسة، لا يمكن تحميل النموذج فقط، بل لا يمكن حفظه. نعتقد أن النموذج ليس مكونًا ديناميكيًا ولا يجب تعديله أثناء وقت التشغيل، لذلك لم نقم بتنفيذ واجهة برمجة التطبيقات لحفظ النموذج في التخزين.

ومع ذلك، هناك أخبار جيدة. نحن نوفر ثلاث طرق مكافئة لتحميل نموذج، إما بشكل ثابت أو ديناميكي:

تحميل النموذج من ملف .CONF

هذه هي الطريقة الأكثر شيوعًا لاستخدام Casbin. من السهل فهمها للمبتدئين ومريحة للمشاركة عندما تحتاج إلى مساعدة من فريق Casbin.

محتوى ملف '.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

ثم يمكنك تحميل ملف النموذج على النحو التالي:

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

تحميل النموذج من الكود

يمكن تهيئة النموذج ديناميكيًا من الكود بدلاً من استخدام ملف '.CONF'. إليك مثال لنموذج 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)

تحميل النموذج من سلسلة نصية

بدلاً من ذلك، يمكنك تحميل نص النموذج بالكامل من سلسلة نصية متعددة الأسطر. ميزة هذا النهج هي أنك لا تحتاج إلى الحفاظ على ملف نموذج.

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)