我正在考虑开始使用 RestHeart,但是在浏览以下问题时我没有找到满意的答案:
在集合中,有一个属性命名文档的所有者(用户的_id)。给定一个经过身份验证的用户,我如何将结果限制为仅属于该用户的文档,即使用户试图通过更改 userId 来篡改 REST 查询?
AFAIU 的解决方案是使用自定义的 AccessManager 类。所以,我的后续问题是;如果有人已经实现了类似的东西并想分享代码?
我正在考虑开始使用 RestHeart,但是在浏览以下问题时我没有找到满意的答案:
在集合中,有一个属性命名文档的所有者(用户的_id)。给定一个经过身份验证的用户,我如何将结果限制为仅属于该用户的文档,即使用户试图通过更改 userId 来篡改 REST 查询?
AFAIU 的解决方案是使用自定义的 AccessManager 类。所以,我的后续问题是;如果有人已经实现了类似的东西并想分享代码?
自定义的 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'}"]