Effector
يمثل Effect
نتيجة قاعدة سياسة، وEffector
هو الواجهة للتعامل مع الآثار في Casbin.
MergeEffects()
تُستخدم الدالة MergeEffects()
لدمج جميع النتائج المتطابقة التي يجمعها المنفذ في قرار واحد.
على سبيل المثال:
- Go
Effect, explainIndex, err = e.MergeEffects(expr, effects, matches, policyIndex, policyLength)
في هذا المثال:
Effect
هو القرار النهائي الذي يتم دمجه بواسطة هذه الوظيفة (يتم تهيئته كـIndeterminate
).explainIndex
هو فهرسeft
(Allow
أوDeny
)، ويتم تهيئته كـ-1
.err
يُستخدم للتحقق مما إذا كان الأثر مدعومًا.expr
هو التمثيل النصي لآثار السياسة.effects
هو مصفوفة من الآثار، والتي يمكن أن تكونAllow
،Indeterminate
، أوDeny
.matches
هو مصفوفة تشير إلى ما إذا كانت النتيجة تتطابق مع السياسة.policyIndex
هو فهرس السياسة في النموذج.policyLength
هو طول السياسة.
يوضح الكود أعلاه كيفية تمرير المعاملات إلى الدالة MergeEffects()
، وستقوم الوظيفة بمعالجة الآثار والتطابقات بناءً على expr
.
لكي تستخدم Effector
، اتبع هذه الخطوات:
- Go
var e Effector
Effect, explainIndex, err = e.MergeEffects(expr, effects, matches, policyIndex, policyLength)
الفكرة الأساسية لـ MergeEffects()
هي أنه إذا كان expr
يمكن أن يطابق النتائج، مما يشير إلى أن p_eft
هو allow
، فإن جميع الآثار يمكن دمجها. إذا لم تتطابق أي قواعد رفض، فإن القرار يكون السماح.
ملاحظة
إذا لم يطابق expr
الشرط 'priority(p_eft) || deny'
، وكان policyIndex
أقصر من policyLength-1
، فسوف يقوم بـ short-circuit بعض الآثار في المنتصف.