我正在编写一个带有用户角色系统的流星应用程序(alanning:roles
)我的角色是基于组的。当用户知道我的组URL时,允许访问该组并在该组中获得角色“defaultUser”。
允许localUser订阅组中的所有本地内容。
根据小组的ID,我也会发布一些内容。
问题是:订阅不会重新订阅。
工作流程:
我的出版物如下:
Meteor.publish "thisGroupPublic", (id) ->
return db.groups.find({_id: id}, {fields: {onlypublicones...}}
Meteor.publishComposite "thisGroupReactive", (id) ->
return {
find: () ->
if !Roles.userIsInRole(@userId, "defaultUser", id)
@ready()
console.log("[thisGroupReactive] => No Rights")
return;
return db.groups.find({_id: id});
children: [
{
find: (group) ->
return db.contents.find({groups: {$in: [group._id]}}, {fields: {apikey: 0}})
}
]
}
当用户在登录页面上时,用户订阅订阅“thisGroupPublic”,并在作为登录用户首次访问该组时获得角色“defaultUser”。但是我如何配置iron:router
重新订阅此订阅,显示内容,而不仅仅是公共内容?
答案 0 :(得分:1)
假设用户在路线/something
您有一些数据发生了变化,您创建了一个会话变量:
Session.set("someDataThatChanges", myChangedData)
您的发布函数需要某种输入,它用于从集合中返回不同的数据:
Meteor.publish("myCollection", function(input){
return myCollection.find(
// do something here based on 'input'
);
});
Iron Router有一个.subscribe
方法,与Meteor.subscribe
相同,也是一个subscriptions
密钥,它接受一个函数。您可以在Tracker.autorun
周围包裹.subscribe
并输入会话变量,以根据该会话变量的更改值自动重新订阅某些内容。
Router.route("/something", {
name: "templateName",
// a place to put your subscriptions
subscriptions: function() {
console.log("this in router ", this);
Tracker.autorun(function(){
this.subscribe('myCollection', Session.get("someDataThatChanges");
});
},
});