我有一个名为“Contacts”的集合,其中每个文档都有authorId。我希望用户在服务器端搜索集合(出于性能目的,因此我使用的是MongoDB引擎),但只返回与用户具有相同authorId的联系人。看起来好像权限只允许或拒绝访问整个集合。有没有办法实现服务器端的过滤?meteor easy-search服务器端过滤
谢谢
我有一个名为“Contacts”的集合,其中每个文档都有authorId。我希望用户在服务器端搜索集合(出于性能目的,因此我使用的是MongoDB引擎),但只返回与用户具有相同authorId的联系人。看起来好像权限只允许或拒绝访问整个集合。有没有办法实现服务器端的过滤?meteor easy-search服务器端过滤
谢谢
将Mongo选择器添加到查询选项。
例如:
EasySearch.createSearchIndex('contactsIndex', {
'collection': Contacts,
},
'query': function(searchString) {
var query = EasySearch.getSearcher(this.use).defaultQuery(this, searchString);
query.authorId = {$in: Meteor.userId}
return query;
}
});
我有一个简单搜索的示例应用程序。 https://github.com/DylanKojiCheslin/adamant-octo-kidney –
我认为这种方法是不安全的,因为客户端可以修改Meteor.userId是任何东西,并有权访问其他作者的联系人。另外,我使用MongoDB引擎,以便在服务器端对整个集合进行搜索。 – WayneUong
Meteor.users.deny({update:function(){ return true; } }); –
我想我找到了正确的方法与权限选项来做到这一点。
http://matteodem.github.io/meteor-easy-search/docs/core/
基本上,我会通过AUTHORID在选择器作为一个过滤器,并且所述AUTHORID相同的当前用户id许可验证。
我还没有验证权限是否实际在服务器中执行。但是在客户端进行权限检查是非常错误的。
你真的想查询一个字符串或某个值的“联系人”,然后用'userId'过滤,或者你只是试图发布'authorId'是'Meteor.userId()'的所有联系人吗? –
您是否发布了所有需要的联系人? – corvid
对不起,我不清楚。我在这里谈论的是简单搜索许可:http://matteodem.github.io/meteor-easy-search/docs/core/ 我不是在谈论流星许可。 – WayneUong