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