【发布时间】:2017-03-13 00:08:08
【问题描述】:
感谢您查看我的问题。对于在生产中使用过 Meteor 的人来说应该很容易,我仍处于学习阶段。
所以我的流星设置是我有一堆文档,ownedBy_id 反映了哪个用户拥有每个文档(https://github.com/rgstephens/base/tree/extendDoc 是完整的 github,请注意它是 extendDoc 分支而不是 master 分支)。
我现在想修改我的 API,以便我可以显示文档每个所有者的真实姓名。在服务器端,我可以使用 Meteor.users.findOne({ownedBy}) 访问它,但在客户端,我发现由于 Meteor 安全协议(用户无权访问其他用户的数据),我无法执行此操作。
所以我有两个选择:
以某种方式修改我发布的结果以在服务器端包含用户的真实姓名
以某种方式将完整的用户数据推送到客户端,并将
_id映射到客户端的真实姓名
这里的最佳做法是什么?我都试过了,这是我目前的结果:
- 我在这里失败了。我知道这是非常“节点”的想法。我可以在客户端访问用户数据,但 Meteor 坚持我的出版物必须返回 cursors 而不是 JSON 对象。如何将 JSON 对象转换为游标或以其他方式规避此
publish限制?奇怪的是,谷歌对这个话题保持沉默。
Meteor.publish('documents.listAll', function docPub() {
let documents = Documents.find({}).fetch();
documents = documents.map((x) => {
const userobject = Meteor.users.findOne({ _id: x.ownedBy });
const x2 = x;
if (userobject) {
x2.userobject = userobject.profile;
}
return x2;
});
return documents; //this causes error due to not being a cursor
}
- 我在这里取得了成功,但我怀疑是以一个巨大的安全漏洞为代价的。我只是将我的发布修改为一个游标数组,如下所示:
Meteor.publish('documents.listAll', function docPub() {
return [Documents.find({}),
Meteor.users.find({}),
];
});
我真的很想做 1,因为我感觉 2 有一个很大的安全漏洞,但请告诉我应该怎么做?非常感谢。
【问题讨论】:
标签: javascript mongodb meteor