当我为集合编写流星方法时,我通常将它们放在共享目录中,以便可以在客户端上模拟它们以获得快速的速度。但是这样安全吗?我应该把方法放在服务器目录中,如果是这样的话?
答案 0 :(得分:0)
是肯定的。你可以使它安全并拥有集合的共享目录。只有在服务器和客户端都有集合时,流星延迟补偿功能才有效。 如果您使用共享代码进行收藏,则必须执行这些操作。
答案 1 :(得分:0)
这不是流星应该适用于一般情况的方式。您应该只实现大多数收集方法(更新,插入,删除)客户端,并检查更新权限服务器端。
如果您有一些包含某些帖子的集合,请不要制作Meteor.call('addNewPost', newPost)
。 Posts.insert(...)
流星方法服务器端的addNewPost
。这将是REST API的经典方式;但这是流星:)
您直接向客户端寻找Posts.insert(...)
。这将立即显示在客户端,并将尝试更新基本服务器端。
然后在服务器端,你必须设置广泛的权限:
Posts.allow({
'insert': function(userId, doc) {
// Check if the user exists
// if he has the right to insert
// if what he tries to insert is ok for you
// ...
},
'update': function(userId, docs, fields, modifier) {
// same, width the fields, the doc, the user...
},
'remove': function(userId, docs) {
// same again
}
});
您可以对集合上的任何内容allow()
或deny()
进行操作。这可能看起来很奇怪,但这是良好延迟补偿的真正基础。如果您不知道如何设置权限,则可能是HUDGE安全漏洞。但如果你知道如何做到这一点,那绝对没有安全问题。
(我的建议是拒绝除了你想要允许的具体元素之外的所有内容)
所以: