Клиент-метеор Minimongo сохраняет информацию о подписанной коллекции после выхода из системы. недавно вошедший в систему пользователь видит старые данные

Я использую публикацию, чтобы ограничить данные, которые пользователь видит в своем отчете.

Meteor.publish("companyReport", function(){
if(!this.userId) return null;
var user = Meteor.users.findOne(this.userId);
var userCompany = user.profile.company;
var userRole = user.roles;
var userName = user.username;

if(function(){Roles.userIsInRole(Meteor.user(), ['chiefs']);})
{return ReportCollection.find({companyName:userCompany});}

else if (function(){Roles.userIsInRole(Meteor.user(), ['managers']);})
{return ReportCollection.find({companyName:userCompany, managerName:userName});}

else
{return null;}
});

Теперь на стороне клиента я могу просто подписаться. Как правило, работает нормально, за исключением:

Я заметил следующее странное поведение, которое мне не нужно: если я вошел в систему как пользователь роли "начальники" и могу видеть отчет по всей компании, если я выйду из системы, а затем войду как пользователь "менеджеров", я могу все еще вижу данные, которые я, как предполагается, не могу видеть.

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

я могу только заключить, что минимонго на клиенте хранит данные сбора из старой подписки как пользователь "начальников".
это правильно? если да, как мне сбросить эти данные при выходе? или же? что обычно делают люди, чтобы избежать этого?

Спасибо

1 ответ

Решение

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

// when you subscribe
var reportHandle = Meteor.subscribe('companyReport');
// then when you want to log out
reportHandle.stop();
Meteor.logout();

ОБНОВИТЬ

Если я понимаю ваш вопрос, вы хотите убедиться, что вы когда-либо сбрасываете минимонго, когда пользователь действительно выходит из системы:

Meteor.logout(function(err) {
    if (err)
        console.log(err);
    else 
        reportHandle.stop();
});

ДРУГОЕ ОБНОВЛЕНИЕ

Ах, теперь я понимаю, что вы спрашиваете. Это зависит от пакета, так как нет onLogout слушатель событий вы можете использовать для этого. Вы, вероятно, можете довольно легко что-то исправить, но я не достаточно хорошо знаком с account-ui-bootstrap, чтобы сказать наверняка.

Другие вопросы по тегам