Отображать только пользователей с определенной ролью в метеорологической таблице

Мой сайт позволяет пользователям подать заявку, подключив свою учетную запись Google, как только учетная запись создается, им дается "ожидающая роль" (с использованием пакета alanning: роли). Я хотел бы иметь таблицу для администраторов, чтобы видеть, когда новые кандидаты подали заявку, оттуда администратор может правильно управлять приложением пользователей (изменить роль на принятую, отклоненную и т. Д.). Итак, я создал свою таблицу, но она показывает всех пользователей, мне интересно, кто-нибудь знает, как это сделать, чтобы в моей таблице отображались только пользователи с "ожидающей" ролью?

Вот что у меня так далеко:

 TabularTables.ManageApplications = new Tabular.Table({
   name: 'ManageApplications',
   collection: Meteor.users,
   allow: function (userId) {
     return Roles.userIsInRole(userId, 'admin');
   },
   autoWidth: false,
   oLanguage: {
       "sSearch": "Search: "
   },
   columns: [
     { data: //column details here },
     { data: //column details here },
     { data: //column details here },
     { data: //column details here },
     { data: //column details here },
   ],
 });

Это работает, но показывает каждого пользователя (не только пользователей с "ожидающей" ролью).

Затем я создал это, чтобы попытаться опубликовать только данные для ожидающих пользователей:

 Meteor.publish("pendingUsers", function() {
   var isAdmin = Roles.userIsInRole(this.userId, 'admin');
     if (isAdmin) {
       return Roles.getUsersInRole('pending').fetch();
     } else {
       return null;
     }
 });

и подписался, добавив pub: "pendingUsers", к моему столу. Это несколько работает, делает так, чтобы в столбцах отображались только данные для "ожидающих" пользователей ролей, но все равно перечислялся каждый пользователь и просто оставалось пустое место, где бы находились данные.

Если кто-нибудь знает, как я могу этого добиться, был бы очень признателен, если бы вы могли дать некоторое представление, поскольку я застрял на этом довольно долгое время... Я считаю, что это может иметь отношение к " Отображению только части данных коллекции". Установить"в табличном readme, но я очень не уверен, как настроить это. Любые примеры или помощь очень ценится.

3 ответа

Решение

Это было решено путем добавления следующего в мою таблицу:

selector: function(userId) {
    return {
        _id: {$in: Roles.getUsersInRole('pending')
                        .map(function(user){ return user._id} ) }
    }
},

Учитывая то, как работают публикации, более чем вероятно, что у вас есть другая публикация и подписка, которая дает вам остальных пользователей, но с другим набором ключей / полей. Поскольку несколько публикаций могут быть запущены в одной коллекции одновременно, вы хотите выполнить одно и то же .find() на клиенте, который ваша публикация дает вам.

Идите дальше и добавьте селектор в определение вашей таблицы следующим образом:

selector: function( userId ) {
  return Roles.getUsersInRole('pending');
}

Вам не нужно .fetch() между прочим, в вашей публикации Roles.getUsersInRole() уже возвращает курсор Meteor.users,

Использование селектора: https://github.com/aldeed/meteor-tabular

Если вы хотите проверить все правила такой группы:

     selector: function (userId) {
       return 'roles.myrole': {$exists: true}};
     },

Или только с несколькими:

     selector: function (userId) {
       return 'roles.myrole': {$in: ['viewer', 'editor']}};
     },
Другие вопросы по тегам