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
، والتي تحدد كيفية مطابقة النمط.
إذا كنت تستخدم المحرر عبر الإنترنت، فإنه يحدد وظيفة مطابقة النمط في الزاوية السفلية اليسرى.
استخدم مطابقة النمط في 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
من أجلك. تحتاج فقط إلى تسجيل الوظيفة مع المنفذ مثل:
- Go
- Node.js
e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedMatchingFunc('g', Util.keyMatch2Func);
عند استخدام وظيفة مطابقة النمط في النطاقات/المستأجرين، تحتاج إلى تسجيل الوظيفة مع المنفذ والنموذج.
- Go
- Node.js
e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedDomainMatchingFunc('g', Util.keyMatch2Func);
إذا كنت لا تفهم ما يعنيه 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
لديها الوصول إلى نطاقين.
باستخدام مطابقة النمط، خاصة في السيناريوهات التي تكون أكثر تعقيدًا ولديها الكثير من النطاقات أو الكائنات للنظر فيها، يمكننا تنفيذ تعريف السياسة
بطريقة أكثر أناقة وفعالية.