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 بعض الآثار في المنتصف.