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

RBAC with Pattern

بداية سريعة

  • استخدم النمط في g(_, _).

    e, _ := NewEnforcer("./example.conf", "./example.csv")
    e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
  • استخدم النمط مع النطاق.

    e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
  • استخدم جميع الأنماط.

    فقط ادمج استخدام كلا الواجهتين البرمجيتين.

كما هو موضح أعلاه، بعد أن تقوم بإنشاء مثيل enforcer، تحتاج إلى تفعيل مطابقة النمط عبر واجهات البرمجة AddNamedMatchingFunc و AddNamedDomainMatchingFunc، والتي تحدد كيفية مطابقة النمط.

ملاحظة

إذا كنت تستخدم المحرر عبر الإنترنت، فإنه يحدد وظيفة مطابقة النمط في الزاوية السفلية اليسرى. editor-tips

استخدم مطابقة النمط في RBAC

أحيانًا، تريد أن يتم منح أدوار تلقائيًا لبعض الأشخاص أو الكائنات أو النطاقات/المستأجرين ذوي النمط المحدد. وظائف مطابقة النمط في RBAC يمكن أن تساعدك على فعل ذلك. وظيفة مطابقة النمط تشارك نفس المعاملات وقيمة العودة كوظيفة المطابقة السابقة.

وظيفة مطابقة النمط تدعم كل معامل من g.

نعلم أنه عادةً ما يتم التعبير عن RBAC كـ g(r.sub, p.sub) في مطابق. ثم يمكننا استخدام سياسة مثل:

p, alice, book_group, read
g, /book/1, book_group
g, /book/2, book_group

لذا alice يمكنها قراءة جميع الكتب بما في ذلك book 1 و book 2. ولكن يمكن أن يكون هناك الآلاف من الكتب، ومن المتعب جدًا إضافة كل كتاب إلى دور الكتاب (أو المجموعة) مع قاعدة سياسة g واحدة.

ولكن مع وظائف مطابقة النمط، يمكنك كتابة السياسة بسطر واحد فقط:

g, /book/:id, book_group

Casbin سيقوم تلقائيًا بمطابقة /book/1 و /book/2 إلى النمط /book/:id من أجلك. تحتاج فقط إلى تسجيل الوظيفة مع المنفذ مثل:

e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)

عند استخدام وظيفة مطابقة النمط في النطاقات/المستأجرين، تحتاج إلى تسجيل الوظيفة مع المنفذ والنموذج.

e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)

إذا كنت لا تفهم ما يعنيه g(r.sub, p.sub, r.dom)، يرجى قراءة rbac-with-domains. باختصار، g(r.sub, p.sub, r.dom) سيتحقق مما إذا كان المستخدم r.sub لديه دور p.sub في النطاق r.dom. لذا هكذا تعمل وظيفة المطابق. يمكنك رؤية المثال الكامل هنا.

بصرف النظر عن بناء جملة مطابقة النمط أعلاه، يمكننا أيضًا استخدام نمط النطاق النقي.

على سبيل المثال، إذا أردنا أن يكون لـ sub الوصول في نطاقات مختلفة، domain1 و domain2، يمكننا استخدام نمط النطاق النقي:

p, admin, domain1, data1, read
p, admin, domain1, data1, write
p, admin, domain2, data2, read
p, admin, domain2, data2, write

g, alice, admin, *
g, bob, admin, domain2

في هذا المثال، نريد alice لقراءة وكتابة data في domain1 وdomain2. مطابقة النمط * في g تجعل alice لديها الوصول إلى نطاقين.

باستخدام مطابقة النمط، خاصة في السيناريوهات التي تكون أكثر تعقيدًا ولديها الكثير من النطاقات أو الكائنات للنظر فيها، يمكننا تنفيذ تعريف السياسة بطريقة أكثر أناقة وفعالية.