如何将结果限制为属于指定用户的 json 个文档
How to restrict the result to json docs belonging to a specified user
我正在考虑开始使用 RestHeart,但是在浏览以下问题时我没有找到满意的答案:
在一个集合中,有一个属性命名文档的所有者(用户的_id)。给定一个经过身份验证的用户,我如何才能将结果限制为仅属于该用户的文档,即使该用户试图通过更改 userId 来篡改 REST 查询?
AFAIU 解决方案是使用自定义 AccessManager class。所以,我的后续问题是;如果有人已经实现了类似的东西并愿意分享代码?
自定义 AccessManager 可以工作,但是默认的 SimpleAccessManager 也可以通过检查 filter
查询参数来实现。
这个想法是让客户请求:
GET /db/coll?filter={'userid': <the userid>}
SimpleAccessManager 现在可以检查过滤条件以使用以下谓词实际使用经过身份验证的用户 ID:
- 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'}"]
我正在考虑开始使用 RestHeart,但是在浏览以下问题时我没有找到满意的答案:
在一个集合中,有一个属性命名文档的所有者(用户的_id)。给定一个经过身份验证的用户,我如何才能将结果限制为仅属于该用户的文档,即使该用户试图通过更改 userId 来篡改 REST 查询?
AFAIU 解决方案是使用自定义 AccessManager class。所以,我的后续问题是;如果有人已经实现了类似的东西并愿意分享代码?
自定义 AccessManager 可以工作,但是默认的 SimpleAccessManager 也可以通过检查 filter
查询参数来实现。
这个想法是让客户请求:
GET /db/coll?filter={'userid': <the userid>}
SimpleAccessManager 现在可以检查过滤条件以使用以下谓词实际使用经过身份验证的用户 ID:
- 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'}"]