Shutik
@Shutik
Погромист халявщик

Фильтр и пагинация в meteor js?

Уважаемые, помогите разобраться с проблемой
Meteor js.
Для пагинации колекций использую alethes:meteor-pages
Проблема в следующем:
В пагинации, в auth устанавливаю фильтр (на сервере), если пользователь - менеджер, опубликовать только назначенных ему клиентов.
UsersPagination = new Meteor.Pagination(Meteor.users, {
    ...
    auth: function(skip, sub){
        //use alanning:roles
        if(Roles.userIsInRole(sub.userId, ['admin'])) { // see all users
            return Meteor.users.find({roles: 'user', user_status: {$in: [1,2,3,4,5]}}, {fields: {services: 0}});
        } else if(Roles.userIsInRole(sub.userId, ['manager'])) { // see own users
            return Meteor.users.find({manager_id: sub.userId, roles: 'user', user_status: {$in: [1,2,3,4,5]}}, {fields: {services: 0}});
        } else {
            console.log('whaa?');
            return false ;
        }
    },
    availableSettings: {
        filters: true,
        settings: true
    }
});

Пользователи показываются, все нормально.
Далее, в шаблоне есть селект с фильтром по статусам пользователей:
Template.usersPaginate.events({
   'change #user_status': function(event, template){
       var status_id = parseInt(event.currentTarget.value, 10) ;
       var filter = {} ;
       if(status_id !== 0) {
           filter.user_status = status_id ;
       }
       //....
       UsersPagination.set({
           filters: filter
       });
   }
});

При изменении фильтра, шаблон обновляется (появляется спиннер), т.е. видно что данные обновляются, НО фильтр который установили на клиенте не работает, т.е. отображаются пользователи со всеми статусами ... wtf ?
  • Вопрос задан
  • 854 просмотра
Решения вопроса 1
Shutik
@Shutik Автор вопроса
Погромист халявщик
Подписчикам, решил вопрос след.образом:
auth: function(skip, sub){
        if (!sub.userId) { return false; }
        var _serverFilter = {roles: 'user'};
        if(Roles.userIsInRole(sub.userId, ['admin'])) {
             //....
        } else if(Roles.userIsInRole(sub.userId, ['manager'])) {
            _serverFilter.manager_id = sub.userId ;
        } else {
            console.log('whaa?');
            return false ;
        }

        var userSettings = UsersPagination.userSettings[sub._session.id] || {};
        var uFilters = userSettings.filters || this.filters;
        var uFields = userSettings.fields || this.fields;
        var uSort = userSettings.sort || this.sort;
        var uPerPage = userSettings.perPage || this.perPage;
        var _filters = _.extend({}, uFilters, _serverFilter);
        var _options = { fields: uFields, sort: uSort, limit: uPerPage, skip: skip };
        return [ _filters, _options ];
    },
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы