5

Profiles というサーバー側の mongo コレクションがあります。

ユーザーが adminId の場合、プロファイルのコレクション全体を公開してサブスクライブする必要があります。

こうすることで、管理者は各プロファイル コレクション アイテムを編集、更新などすることができます。

しかし、ユーザーが自分のプロファイル レコードを表示できるようにしたいと考えています。

だから私はこれを試しました...

クライアント側

MyProfile = new Meteor.Collection("myprofile");
Meteor.subscribe('profiles');
Meteor.subscribe('myprofile');

共通 - クライアントとサーバー側

Profiles = new Meteor.Collection("profiles");

サーバー側 - プロファイルの発行と購読は正常に機能します。

// this returns all profiles for this User
// if they belong to an ACL Group that has acl_group_fetch rights
Meteor.publish("profiles", function() { 
    var user_groups = Groups.find({users: this.userId()});
    var user_groups_selector = [];
    user_groups.forEach(function (group) {
       user_groups_selector.push(group._id);
    });
    return Profiles.find( {
       acl_group_fetch: {
          $in: user_groups_selector
        } 
    });
});

ここから問題が始まります。Profiles.find は、コンソール サーバー側に出力できるため、コレクション アイテムを返します。しかし、何らかの理由でパブリッシュとサブスクライブが機能していません。クライアントは何も受け取りません。

//  return just the users profile as myprofile
Meteor.publish("myprofile", function() {
  return  Profiles.find({user: this.userId()});
});

私が間違っていることについてのアイデア。ユーザー A が挿入、フェッチ、更新、削除できるレコードのコレクションを公開できるようにしたいのですが、ユーザー B (C、D、および E) は自分のレコードしか表示できません。

4

3 に答える 3

1

あなたの問題は流星よりもMongoDB側にあると思います。あなたのケースを考えると、2 つのコレクション (グループとプロファイル) を作成します。

Group コレクション内の各ドキュメントは、Profile コレクション内のドキュメントへのDBRefを含む配列を特徴とします (実際にはユーザーなので、Profile コレクションの名前をより直感的な imo として User に変更することを考えます)。

Profile コレクションとそのドキュメントについても同様です。プロファイル コレクション内の各ドキュメント (ユーザーを表す) には、ユーザーが属するグループ (Group コレクション内のドキュメント) への DBref を含む配列フィールドがあります。

于 2012-08-01T05:37:19.403 に答える
1

エラーをどのようにチェックしているかは完全にはわかりませんが、私が遭遇した落とし穴に遭遇している可能性があると思います. Profiles コレクションを使用してデータを公開すると、pub/sub 呼び出しで 'myprofile' 名が使用されていても、カーソルを返す対象のコレクションで常にデータを使用できます... この場合、 「myprofile」パブリケーションで公開すると、クライアントの「プロファイル」コレクションに表示されます。publish 呼び出しは、クライアントに「myprofile」コレクションを作成しません。そのため、「myprofile」コレクションで find() を実行しようとしても、データは表示されません。(Meteor/MongoDB はコレクションが存在しないと文句を言うことはありません。これは、コレクションを参照すると常に遅延して作成されるためです。)

于 2012-08-01T17:09:18.983 に答える
0

ここでの問題は、コレクションが 1 つしか必要ないことだと思いますProfiles

したがって、問題のある行を削除するだけなら

MyProfile = new Meteor.Collection("myprofile");

すべてが正常に機能するはずです (Profilesコレクション内に両方のデータセットがあります)。

于 2012-08-01T02:56:23.460 に答える