2016-08-06 3 views
0

я рассматриваю начать использовать RestHeart, однако я не нашел удовлетворительного ответа при просмотре вокруг следующего вопроса:Как ограничить результат JSon документы, принадлежащие указанному пользователю

В коллекции есть один атрибут называя владельца документа (_ид пользователя). Учитывая аутентифицированный пользователь, как я могу ограничить результат только документами, принадлежащими этому пользователю, даже если пользователь пытается вмешаться в запрос REST, изменив userId?

AFAIU решением было бы использовать пользовательский класс AccessManager. Итак, мой последующий вопрос; если кто-то уже реализовал что-то подобное и хотел бы поделиться этим кодом?

ответ

1

Пользовательский AccessManager будет работать, однако по умолчанию SimpleAccessManager может выполнить его, установив параметр запроса filter.

Идея имея клиента, запрашивающего:

GET /db/coll?filter={'userid': <the userid>} 

SimpleAccessManager теперь может проверить состояние фильтра на самом деле использовать аутентифицированный идентификатор пользователя со следующим предикатом:

- role: ROLE 
    predicate: path-template[value="/db/coll"] and equals[%{q,filter},"{'userid':'%u'}"] and method[value="GET"] 

Трюк делается следующим префиксом equals, который проверяет параметр запроса фильтра равным строке {'userid': <authenticated_user_id>}

equals[%{q,filter},"{'userid':'%u'}"] 
+0

Спасибо, Андреа. Я дам ему попробовать. BTW, вы любезно обновите документы с советами. Я думаю, другие могут быть заинтересованы в этом, потому что это довольно распространенный случай использования. –

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