2017-06-24 3 views
0

私はMeteorを初めて使い、To-Doリストのチュートリアル(https://www.meteor.com/tutorials/blaze/creating-an-app)を見て回りました。私は自動公開を削除し、すべてのタスクがプライベートであるように表示機能を設定しました(つまり、ユーザーは自分のタスクしか見ることができません)。すべてのタスクを表示するためにMeteorを使用して管理者アカウントを設定してください

ここでは、管理者アカウント管理者は誰の仕事も見ることができますが、他人は何も見ることができません。私はこれをappフォルダに既にダウンロードしてあるalanning-rolesパッケージを使ってやろうとしています。だけではなく、すべてのタスクを表示するので、私はif文ですべてのタスクを表示するには、コマンドを囲み、その後

const mod = 'E9Y4qtFXK2qQGAGq3'; // this is the userId of the account that I wish to make admin 
Roles.addUsersToRoles(mod, 'moderator'); 

:私のtasks.jsファイルで

は、私が行を挿入した

if (Meteor.isServer) { 
    if (Roles.userIsInRole(this.userId,'moderator')) { 
    Meteor.publish('tasks', function tasksPublication() { 
    return Tasks.find(); 
    }); 
    } 
} 

モデレータ/ adminとしてログインしている場合はすべてのタスクが表示され、それ以外の場合は表示されません。しかし、私はこのコードを実行すると、私は管理者としてログインしているときにタスクが表示されません。私が設定したuserIdが正しいこと、そしてコレクションにタスクがあることは確かです。誰にも問題の可能性についてのアイデアはありますか?

(あるいは、これを行う方法上の任意の他の提案alanning-役割を使用する必要はありません - ?私はちょうどそれが最も簡単だろうと思った)

本当にありがとうございました -C

EDIT私はラインでの「MOD」と「this.userId」を交換する場合:

if (Roles.userIsInRole(this.userId,'moderator')){...} 

すべてのタスクが表示されます。だから問題はthis.userIdの出力にあるようです。

答えて

0

あなたは、現在のユーザーが公開関数の中に「司会者」であるかどうかをチェックされている場所に移動する必要があります:あなたのコード内の現在

あなたがthis.userIdにアクセスすると、サーバが起動され、かつthis.userIdがなりますundefined。したがって、ifステートメントのコードが実行されていないため、publish関数は作成されず、クライアントはこのデータを購読できません。

はこれを試してみてください:

if (Meteor.isServer) { 
    Meteor.publish('tasks', function tasksPublication() { 
     if (Roles.userIsInRole(this.userId, 'moderator')) { 
      return Tasks.find({}); 
     } 
    }); 
} 

さて、スタートアップMeteor.isServerブロックの実行に、その内部の役割を確認するためのコードと、tasks出版物を作成します。この関数は、クライアントがサブスクライブするたびに呼び出され、このコンテキストではthis.userIdが現在のクライアントのユーザーIDになります。

また、あなたのアプリケーションのフォルダにalanning-役割パッケージのソースコードを配置していない - パッケージが含まnpm install @alanning/roles --save

meteor add alanning:roles、またはNPM経由を実行して、どちらか
0

かわりthis.userIdのMeteor.userId()を使用する必要があります。経験則としてとして

if (Meteor.isServer) { 
    if (Roles.userIsInRole(Meteor.userId(),'moderator')) { 
    Meteor.publish('tasks', function tasksPublication() { 
    return Tasks.find(); 
    }); 
    } 
} 

、いつもあなたがこれを使用する必要があります出版、内部以外Meteor.userId()を使用します。 userIdを

関連する問題