如何限制文件夹,只有登录Meteor应用程序的人才能下载文件?
我研究了多种方法,但主要问题是我无法访问(我得到null
。):
Meteor.user() or this.userId()
我试过了:
__meteor_bootstrap__.app
.use(connect.query())
.use(function(req, res, next) {
Fiber(function () {
// USER HERE?
}).run();
});
或
__meteor_bootstrap__.app.stack.unshift({
route: "/protected/secret_document.doc", // only users can download this
handle: function(req, res) { Fiber(function() {
// CHECK USER HERE ?
// IF NOT LOGGED IN:
res.writeHead(403, {'Content-Type': 'text/html'});
var content = '<html><body>403 Forbidden</body></html>';
res.end(content, 'utf-8');
}).run() }
});
答案 0 :(得分:3)
你可以try storing the files in mongodb,这意味着它们会被挂钩到你的收集系统中,并且可以在客户端和服务器上查询。然后,只需将相关数据发布给特定用户的客户端,或使用Meteor.methods以这种方式公开信息。
示例:强>
假设文件存储在MongoDB中,我们首先将它们发布到客户端:
Meteor.publish("files", function(folder) {
if (!this.userId) return;
// the userHasAccessToFolder method checks whether
// this user is allowed to see files in this folder
if (userHasAccessToFolder(this.userId, folder))
// if so, return the files for that folder
// (filter the results however you need to)
return Files.find({folder: folder});
});
然后在客户端上,我们会自动订阅已发布的频道,以便每当它发生变化时,它都会刷新:
Meteor.startup(function() {
Meteor.autosubscribe(function() {
// send the current folder to the server,
// which will return the files in the folder
// only if the current user is allowed to see it
Meteor.subscribe("files", Session.get("currentFolder"));
});
});
NB。我没有测试上面的代码,所以考虑它伪代码,但它应该指向你解决这个问题的大方向。困难的部分是将文件存储在mongodb!
答案 1 :(得分:2)
我更关心为什么Meteor.user()
无效。
几个问题:
accounts-base
添加到您的流星项目中?accounts-password
,accounts-facebook
等)? (可选 - accounts-ui
易于使用?)Meteor.user()应该是当前用户,Meteor.users应该是所有以前登录用户的Meteor集合。