3

ユーザーの役割に応じて、ユーザー データを選択的に公開しようとしています。メールアドレスとユーザー名を公開してほしい。ユーザーが管理者である場合、ユーザー プロファイル全体を表示できる必要があります。

サーバー上 (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 を返します。)

4

1 に答える 1

0

元の返品明細書は問題ないと思います。ただし、 isのRoles.userIsInRole場合に関数で何が起こるかを調べます。パブリッシュ機能がクラッシュする原因となるバグがそこにある可能性があります。@userIdnull

私は Coffeescripter ではありませんが、それが問題である場合は、これを Publish 関数の先頭に追加すると問題が解決すると思います。

if not @userId return
于 2013-04-09T14:14:51.423 に答える