发布-订阅-流星客户端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;}
});

现在,在客户端,我可以简单地订阅。它通常运行良好,除了:

我注意到了以下我不想看到的奇怪行为:如果我以"主管"角色用户的身份登录,并且可以看到全公司的报告,如果我注销,然后以"经理"用户的身份登陆,我仍然可以看到我不被允许看到的数据。

我知道我的发布控制机制运行良好,因为当我从另一个浏览器以管理员身份登录时,我看到了正确的结果(更有限)

我只能得出结论,客户端上的minimongo作为"酋长"用户保留了旧订阅的收集数据
这是正确的吗?如果是,我如何在注销时刷新这些数据?或人们通常会做些什么来避免这种情况?

感谢

您可能确实需要在注销时刷新这些数据,这将涉及保存订阅句柄,然后停止它:

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

更新

如果我理解你的问题,你想确保你只在用户真正注销时刷新minimongo:

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

另一更新

啊,现在我明白你在问什么了。这取决于包,因为没有onLogout事件侦听器可以用于此操作。你可能可以很容易地修补一些东西,但我对账户ui bootstrap还不够熟悉,不能肯定。

最新更新