ユーザーの役割に応じて、ユーザー データを選択的に公開しようとしています。メールアドレスとユーザー名を公開してほしい。ユーザーが管理者である場合、ユーザー プロファイル全体を表示できる必要があります。
サーバー上 (CS):
Meteor.publish "allUsers", ->
if Roles.userIsInRole @userId, 'admin' then data = profile: 1
else data = 'profile.name': 1
data['emails.address'] = 1
Meteor.users.find {}, fields: data
クライアント (CS) で:
Meteor.subscribe("allUsers")
これはほとんどの場合うまく機能します。ユーザーがログアウトしてから再度ログインすると、サブスクリプションで何かが壊れており、
Meteor.user().profile
何も返しません。ページを更新すると、プロファイル フィールドが再び入力されます。この問題を解決するために、サーバーの return ステートメントを次のように変更しました。
[
Meteor.users.find {}, fields: data
Meteor.users.find @userId
]
これは何もしませんでした。これは Meteor のバグですか、それともログイン/ログアウトを根本的に誤解していますか?
アップデート
もう少し読んだところ、Meteor は同じコレクションの複数のサブスクリプション/パブリッシュのデータをランダムに選択するようです。それを念頭に置いて、リターンクエリを次のように変更しました。
Meteor.users.find _id: $ne: @userId, fields: data
他のユーザーからのデータは公開されなくなりました。(コンソールの Meteor.users.find().count() は 1 を返します。)