我有一个关于流星派对示例的问题。
如果我调用此代码:
Parties.allow({
insert: function () {
return true;
},
remove: function (){
return true;
},
update: function() {
return true;
}
});
每个人都可以插入,删除和更新。示例中的代码是
Parties.allow({
insert: function (userId, party) {
return false; // no cowboy inserts -- use createPage method
},
update: function (userId, parties, fields, modifier) {
return _.all(parties, function (party) {
if (userId !== party.owner)
return false; // not the owner
var allowed = ["title", "description", "x", "y"];
if (_.difference(fields, allowed).length)
return false; // tried to write to forbidden field
// A good improvement would be to validate the type of the new
// value of the field (and if a string, the length.) In the
// future Meteor will have a schema system to makes that easier.
return true;
});
},
remove: function (userId, parties) {
return ! _.any(parties, function (party) {
// deny if not the owner, or if other people are going
return party.owner !== userId || attending(party) > 0;
});
}
});
所以我的问题是变量useriD和派对在哪里,例如
insert: function (userId, party) {
被定义了吗?这些是我在方法中调用的变量吗
Meteor.call("createParty", variable1, variable2)
?但这没有意义,因为客户端调用
Meteor.call('createParty', {
title: title,
description: description,
x: coords.x,
y: coords.y,
public: public
}
我希望有人可以向我解释允许函数?谢谢!
要了解允许/拒绝,您需要了解userId
和doc
参数的来源。(就像在任何函数定义中一样,实际的参数名称无关紧要。仅看缔约方插入示例:
Parties.allow({
insert: function (userId, party) {
return false; // no cowboy inserts -- use createPage method
}
});
party
参数是要插入的文档:
Parties.insert(doc);
如果您使用的是 Meteor 帐户身份验证系统,则会自动设置userId
参数。否则,您必须在服务器上自行设置。你是怎么做到的?
通常,使用 Meteor.call()
从客户端调用服务器上的代码。由于没有内置的 API 来设置 userId(帐户除外),因此您必须编写自己的 API(在服务器代码中):
Meteor.methods({
setUserId: function(userId) {
this.setUserId(userId);
}
});
然后,您可以在客户端代码中的任何位置像这样调用它:
Meteor.call('setUserId', userId);
1) 变量 useriD 和 party 在哪里定义?无处!目的是任何用户都不能调用此函数。
这是为了从可以使用控制台手动插入新参与方的用户那里控制数据库。记住 Meteor 在客户端和服务器中复制数据库。
任何用户都可以通过控制台手动插入新参与方。这很好。但是随后服务器会拒绝插入,因为它是不允许的。
2)这些是我在方法Meteor.call("createParty", variable1, variable2)
中调用的变量吗?是的,变量可用,但此代码未使用正确的定义,即:
Meteor.methods({
createParty: function (options) {
之后它被用作
Meteor.call('createParty',
{ title: title, public: public, ... }, // options array!!
function (error, party) { ... } // function executed after the call
);
它对你有帮助吗?