Отображать только пользователей с определенной ролью в метеорологической таблице
Мой сайт позволяет пользователям подать заявку, подключив свою учетную запись 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']}};
},