2017-04-16 11 views
1

パッケージを使用する:alanning/meteor-roleusersコレクションからroles配列を読み取る方法は?

他のユーザーの役割を管理するための管理者用の簡単なUIを構築しています。ユーザーは複数のロールを持つことができます。ロールを選択するためにチェックボックスを使用しています。

私が直面してる問題は、私は、ユーザーのコレクションに保存されている役割のアレイにアクセスすることができないんだということです。ヘルパーには、私がチェック...

注意として、UIにそれをロードするために、ユーザーの役割を確認しています:このHTMLは今ちょうどそれをテストするために、すべてのユーザーがアクセス可能です。私はそれが動作するようになった後、それは管理者のためだけにavailbeされます。このコードはすべてのユーザーではなく、サインインしたユーザーに対してのみ機能することに気付きました。

マイコード:

HTML:

  <label class="checkbox-inline"><input type="checkbox" class="userRole" value="r1" checked="{{isRoleChecked 'r1'}}"r1</label> 
      <label class="checkbox-inline"><input type="checkbox" class="userRole" value="r2" checked="{{isRoleChecked 'r2'}}">r2</label> 
      <label class="checkbox-inline"><input type="checkbox" class="userRole" value="r3" checked="{{isRoleChecked 'r3'}}">r3</label> 
      <label class="checkbox-inline"><input type="checkbox" class="userRole" value="r4" checked="{{isRoleChecked 'r4'}}">r4</label> 
      <label class="checkbox-inline"><input type="checkbox" class="userRole" value="r5" checked="{{isRoleChecked 'r5'}}">r5</label> 
      <label class="checkbox-inline"><input type="checkbox" class="userRole" value="r6" checked="{{isRoleChecked 'r6'}}">r6</label> 

isRoleCheckedヘルパー:デフォルトでは

isRoleChecked: function(value) { 

    // didn't work 
    roles = Roles.getRolesForUser(this._id); 
    if (roles) { 
     for(var i=0; i < roles.length; i++) { 
     if (roles[i] == value){ 
      return true; 
     } else { 
      return false; 
     } 
     } 
    } 

    }, 

答えて

2

は、流星は、現在のユーザーを除き、Meteor.users収集のためprofile外のデータを公開していません。その根拠は、機密データが常に隠されていることを確認することです。

自動公開パッケージがインストールされている場合は、システム上のすべてのユーザーに関する情報がすべてのクライアントに公開されます。これは* usernameprofileを含み、そして公共であることを意味しているサービスのあらゆる分野(例えばservices.facebook.idservices.twitter.screenName)。さらに、自動公開を使用すると、アクセストークンを含む現在ログインしているユーザーの詳細情報**が公開されます。

(ソース:https://docs.meteor.com/api/accounts.html#Meteor-users

*他のフィールドを意味のでrolesautopublishによって公開されていない、を除外されています。

**これは、現在のユーザーのためのrolesフィールドを含みます。あなたのコードは、現在のユーザーに対してのみ働く理由です

ので、あなただけのセットアップにパブリケーションを必要とする(とそれに加入)、明示的にクライアントにユーザーのrolesフィールドを送信しています。

サーバー:

Meteor.publish('roles',() => { 
    if (Roles.userIsInRole(this.userId,['Admin']) { 
    return Meteor.users.find({},{fields: {roles: 1}}); 
    } else this.ready(); 
}); 

そしてクライアントにそれを購読する:あなたはrolesキー公開する必要があり

+0

は – MJO

+0

@ghybs上記の答えに記述されている動作は、特に 'autopublish'と関連があります(https://docs.meteor.com/api/accounts.html#Meteor-usersを参照)。それ以外の場合は、他のユーザーの 'profile'データもないでしょう。 – ghybs

+0

ありがとうございました – MJO

1

autopublishパッケージを使用して、私は敷居だ

Meteor.subscribe('roles'); 
+1

あなたの答えに感謝します。あなたが公開について書いたコードを試しましたが、それは何らかの理由でうまくいかなかったのです。私が働いていたコード: if(Meteor.isServer){ Meteor.publish( 'roles'、()=> { return Meteor.users.find({}、{fields:{roles:1}}) ; }); } – MJO

+0

私はあなたが* alanning:roles *パッケージを使用していると仮定していました。 –

+0

はい、私はalanning:rolesパッケージを使用していると上記しましたが、何らかの理由であなたが提供したコードが残念なことに動作しませんでした。しかし、本当にありがとうございました – MJO

関連する問題