6

流星のパーティーの例について質問があります。

このコードを呼び出すと:

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 と party がどこにあるかです

 insert: function (userId, party) {

定義されていますか? これらはメソッドで呼び出す変数ですか

 Meteor.call("createParty", variable1, variable2)

? しかし、クライアントが呼び出すため、これは意味がありません

 Meteor.call('createParty', {
    title: title,
    description: description,
    x: coords.x,
    y: coords.y,
    public: public
  }

誰かが許可機能を説明してくれることを願っていますか? ありがとう!

4

2 に答える 2

5

許可/拒否を理解するには、 パラメータuserIddocパラメータがどこから来たのかを理解する必要があります。(他の関数定義と同様に、実際のパラメーター名は重要ではありません。)Parties の挿入例を見ると、次のようになります。

Parties.allow({

  insert: function (userId, party) {
     return false; // no cowboy inserts -- use createPage method
  }

});

partyパラメータは、挿入されるドキュメントです。

Parties.insert(doc);

Meteor アカウント認証システムを使用している場合、userIdパラメーターは自動的に設定されます。それ以外の場合は、サーバーで自分で設定する必要があります。どうやってそれをしますか?

一般に、 を使用して、クライアントからサーバー上のコードを呼び出しますMeteor.call()。userId (アカウント以外) を設定するための組み込み API がないため、独自に記述する必要があります (サーバー コードに記述します)。

Meteor.methods({

   setUserId: function(userId) {
       this.setUserId(userId);
   }

});

次に、クライアント コードの任意の場所で、次のように呼び出すことができます。

Meteor.call('setUserId', userId);
于 2013-04-05T17:11:48.150 に答える
0

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
 );

役に立ちましたか?

于 2013-01-24T09:16:14.213 に答える