2015-10-16 2 views
1

Я пытаюсь запустить запрос, который извлекает определенный набор пользователей из таблицы User и представляет их одному зарегистрированному пользователю, используя Parse JS SDK. Сначала я был запущен запрос как:Выполняет только пользовательский запрос анализа пользователя

(new Parse.Query(Parse.Object.extends("_User"))).containedIn("objectId", [/* list of user ids */]).find(/* success & error blocks */); 

, но потом я узнал, что более правильный путь был:

(new Parse.Query(Parse.User)).containedIn("objectId", [/* list of user ids */]).find(/* success & error blocks */); 

Но даже с этим, я хотел бы получить обратно пустой список. Я дважды проверил db и убедился, что идентификаторы, которые я проходил, были там, и они были. Просто, черт возьми, я попробовал:

(new Parse.Query(Parse.User)).find(/* success & error blocks */); 

И я вернул пользовательский объект, соответствующий текущему пользователю. Похоже, что мои запросы пользователя доступны только для текущего пользователя. Я также заметил, что когда я попытался запустить эквивалентный запрос из Консоли API Parse, я получил те же результаты! Это какая-то глобальная установка, или я делаю что-то неправильно? Благодаря!

ответ

1

Я бы рекомендовал не конденсировать все эти вызовы в одну строку ради сохранения линий. Он жертвует удобочитаемостью. Хотя это технически не так, и документы даже говорят, что вызовы возвращают запрос, поэтому вы можете связывать вызовы, поэтому каждому их нужно.

Я не вижу ничего плохого в вашем звонке. Как вы получаете доступ к извлеченным объектам? Каков список объектов, которые вы передаете в containsIn? Думаю, нам нужно немного больше вашего кода.

Редактировать - Я бы сказал, что я на 80% уверен, без дополнительной информации, что это проблема ACL/CLP. Перейдите на панель управления, нажмите на класс _User, нажмите «Безопасность» и посмотрите, что такое параметры чтения/записи.

+0

Извините, это на самом деле не мой точный код, просто сжатый ради короткой короткой позиции. –

+0

Нет извлеченных объектов, кроме последнего случая. Я отслеживаю сетевые запросы. Список - это всего лишь массив строк objectId ... –

+0

Но откуда вы их вытаскиваете? Я хотел бы увидеть снимок экрана, в котором вы выводили массив строк, которые вы запрашиваете, а также скриншот вашей базы данных, показывающий, что эти объектные объекты действительно принадлежат пользователям, для которых вы запрашиваете. –

2

Я считаю, что вы должны использовать CloudCode из-за настроек безопасности пользователя в Parse. Попробуйте перевести это на функцию облачного кода и включите

Parse.Cloud.useMasterKey() 

до функции cloudcode. Это функция безопасности Parse для обеспечения того, чтобы люди не могли редактировать и получать доступ к другим профилям пользователей и информации.

сайт См Анализировать безопасности здесь:

https://parse.com/docs/js/guide#security-object-level-access-control

и больше об использовании и соображения реализации useMasterKey() и ее сохранение.

https://parse.com/docs/js/guide#security-implementing-business-logic-in-cloud-code

+0

Хммм ... Это несчастливо ... Из моего Google и SDK, похоже, похоже, что это возможно ... Это просто потому, что пользователь подписал контракт? В частности, ссылаясь на: https://parse.com/docs/js/guide#users-querying –

+0

Подождите, из вашей первой ссылки это означает, что это возможно, если я запрашиваю объект «_User»? Мне просто нужно читать, а не писать ... –

+1

Да. Я знаю, что Вы имеете ввиду. Это не ясно в документации. Я несколько раз пробовал и сталкивался с теми же проблемами. Существует возможность анонимного пользователя, но я сомневаюсь, что это решило бы проблему. Cloud Code позволяет им защищать свои пользовательские объекты, поскольку код облака нельзя просто ввести в консоль. –

0

Похоже CLP вопрос для меня. Возможно, разрешение поиска в вашем классе пользователя отключено. Перейдите в свой класс User, нажмите на охрану, перейдите на опцию, а затем проверьте, отменено ли разрешение поиска или нет.

Смежные вопросы