Каждый документ в моем индексе Elasticsearch имеет два списка управления доступом, содержащие идентификаторы пользователей. Один из них - список разрешений, другой - список запретов. Я пытаюсь добавить фильтр к заданному запросу, который рассматривает эти списки ACL. Я думал, что могу использовать запрос bool
с предложением must
для данного запроса, предложением filter
для списка разрешений и предложением must_not
для списка запретов. Что я до сих пор (пример для пользователя 1):Документы запроса с фильтром контроля доступа
{
"bool" : {
"must" : {
[given query]
},
"filter" : [ {
"match" : {
"acl.allow" : {
"query" : "/user/1",
"type" : "boolean"
}
}
}],
"must_not" : [ {
"match" : {
"acl.deny" : {
"query" : "/user/1",
"type" : "boolean"
}
}
}]
}
}
К сожалению, этот запрос не возвращает желаемый результат. Он возвращает объекты, которые не указали пользователя 1 в списке разрешений (поведение, которое я не понимаю). Кроме того, он (очевидно) игнорирует объекты с пустым списком управления доступом (который должен быть видимым для всех). Любые предложения по исправлению этого?
Что такое отображение для всего поля 'acl' и, кроме того, просьба предоставить некоторые примеры документов, особенно для полей' acl'. –