Конфликтующая политика OPA - PullRequest
0 голосов
/ 18 июня 2020

Я написал образец re go code

default allow = false

allow {
  some username
  input.method = "GET"
  input.path =["example", username]
  input.user = username

}

allow {
  some username
  input.method = "GET"
  input.path = ["example", username]
  input.user != username

}

Когда я пытаюсь проверить политику с помощью http://localhost: 8181 / v1 / data / http / authz / allow API с параметрами

{
    "input": {
    "method": "GET",
    "path": ["example", "sara"],
    "user": "sara"
    }
}

и

{
    "input": {
    "method": "GET",
    "path": ["example", "sara"],
    "user": "notsara"
    }
}

Получаю ответ: {"solution_id": "xxxxx", "result": true}

Is это ожидаемый результат? Разве не должно быть ошибки, если существуют конфликтующие политики?

1 Ответ

1 голос
/ 18 июня 2020

Когда у вас есть несколько определений для правила, вы выражаете логическое ИЛИ . По сути, они не противоречат друг другу; они оба оцениваются, и если какое-либо из правил совпадает, ваш результат положительный.

Конфликт правил возникает, когда вы пытаетесь определить то же правило как частичное правило и как полное правило:

allow {
  some username
  input.user = username
}

allow[id] {
  some username
  input.user != username
}
1 error occurred: module.rego:3: rego_type_error: conflicting rules named allow found

(пример был не очень хорош и не совсем понятен, но я думаю, что он работает как пример)

...