Перейти к основному контенту

Effector

Effect представляет собой результат правила политики, а Effector - это интерфейс для обработки эффектов в Casbin.

MergeEffects()

Функция MergeEffects() используется для объединения всех совпадающих результатов, собранных принудителем, в одно решение.

Например:

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, следуйте этим шагам:

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, он будет сокращать некоторые эффекты посередине.