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.