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

Effector

Effect — это результат правила политики (разрешение или запрет). Интерфейс Effector определяет, как энфорсер объединяет несколько совпадающих эффектов в одно итоговое решение.

MergeEffects()​

MergeEffects() принимает все эффекты из совпавших политик и формирует одно итоговое разрешение/запрет.

Effect, explainIndex, err = e.MergeEffects(expr, effects, matches, policyIndex, policyLength)

Параметры:

ПараметрОписание
exprСтрока выражения эффекта политики (например, из модели).
effectsСрез эффектов: Allow, Deny или Indeterminate.
matchesИндексы совпавших политик.
policyIndexТекущий индекс политики.
policyLengthОбщее количество политик.

Возвращаемые значения:

  • Effect — Итоговое решение (Allow, Deny или Indeterminate).
  • explainIndex — Индекс политики, определившей результат (-1, если неприменимо).
  • err — Не nil, если effector не поддерживает данное выражение.

Использование пользовательского Effector:

var e Effector
Effect, explainIndex, err = e.MergeEffects(expr, effects, matches, policyIndex, policyLength)

Для стандартного эффекта allow-override результат является разрешением, если какая-либо из совпавших политик разрешает доступ и ни одна не запрещает. Пользовательские effector'ы реализуют другую семантику (например, deny-override, priority).

примечание

Если выражение эффекта не равно priority(p_eft) || deny, энфорсер может выполнить короткое замыкание: как только результат определен, оставшиеся политики не вычисляются. Поэтому при policyIndex < policyLength-1 некоторые эффекты могут быть пропущены.

Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.