Фильтр запросов 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_metadatas в отдельной базе данных и преобразовать синтаксис 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 ", это не работает:/

Другие вопросы по тегам