Фильтр запросов lucene не работает
Я использую это filter hook
в моем расширении делегированного администрирования Auth0.
function(ctx, callback) {
// Get the company from the current user's metadata.
var company = ctx.request.user.app_metadata && ctx.request.user.app_metadata.company;
if (!company || !company.length) {
return callback(new Error('The current user is not part of any company.'));
}
// The GREEN company can see all users.
if (company === 'GREEN') {
return callback();
}
// Return the lucene query.
return callback(null, 'app_metadata.company:"' + company + '"');
}
Когда пользователь вошел в систему, чья компания GREEN
могут видеть все пользователи. Но когда пользователь вошел в систему, чья компания RED
не может видеть пользователей, чья компания RED
,
Мне нужно сделать это, когда пользователь вошел в систему, пользователь должен иметь доступ только к пользователям в своей компании. (кроме пользователей из ЗЕЛЕНОЙ компании).
Но приведенный выше код не дает ожидаемого результата. В чем может быть проблема?
3 ответа
Я наконец закончил с этим решением.
Используется функция поиска для фильтрации пользователей. Я должен был изменить ниже двух файлов.
fetchUsers
функция в client\actions\user.js
изменено
функция экспорта fetchUsers(search = '', reset = false, page = 0)
в
функция экспорта fetchUsers(search = '@red.com', reset = false, page = 0)
А ТАКЖЕ
onReset
функция в client\containers\Users\Users.jsx
изменено
onReset = () => { this.props.fetchUsers('', true); }
в
onReset = () => { this.props.fetchUsers('@red.com', true); }
Это может быть связано с небольшим предупреждением на странице документации по поиску пользователей.
В основном они не позволяют вам искать свойства в app_metadata
поле больше. К сожалению, это изменение было переломным и без предупреждения.
Нам пришлось внести изменения в наш API, чтобы мы сохранили копию app_metadata
s в отдельной базе данных и преобразовать синтаксис Lucene в запросы MongoDB, чтобы мы могли выполнять запросы по цепочке user_id:"<>" OR user_id:"<>" OR ...
,
Одно предупреждение: вы не можете передать запрос длиннее 72 user_id
с долго. Это число до сих пор не документировано и получено опытным путем.
Кроме того, вы не можете полагаться на хуки Auth0 для добавления новых пользователей в вашу базу данных, так как они не запускаются для социальных входов, только для Username-Password-Authentication
соединения.
Я надеюсь, что это дало вам некоторое объяснение того, почему это не работает, а также возможное решение.
На вашем месте я бы искал альтернативу для Auth0, чем мы сейчас и занимаемся.
У вас все еще есть проблемы с этим или у вас все исправлено? У меня буквально та же проблема. Я открыл заявку в службу поддержки Auth0 - я дам вам знать, что я слышу в ответ.
Я не думаю, что с кодом что-то не так, скорее функция поиска - запрос lucene, который возвращает: app_metadata.company:"RED"
Если вы попытаетесь запустить его в рамках делегированного администратора без применения хуков, запрос не будет работать. Я могу искать отдельные свойства пользователя, такие как электронная почта:"test@test.com" или имя:"john doe", и это работает, но если я попытаюсь объединить поиск, app_metadata.company:"test "или user_metadata.company:"test ", это не работает:/