我有一个名为Admins的集合,我使用Admins.findOne({userId: Meteor.userID})
来检查用户是否是管理员,如果我在流星shell中使用它并且当我调用我定义的方法时它可以正常工作对于它来自浏览器控制台,但当我使用它进行服务器端权限检查时,Admins集合似乎为空(Admins._collection._docs._map
为空。我已经检查过。)。我不知道为什么我的方法无法访问它,如果我在服务器端执行它,但当我从chrome dev工具调用它时工作正常。我的方法是:
updateArticle: (id, obj) ->
console.log Admins //appears to be empty
console.log Meteor.userId()
Meteor.call 'hasBasicPermissions', (err,res) ->
console.log res // false
if res
Articles.update(id, obj)
else
Meteor.call('notAuthorisedError') // throws the error
isEditor: ->
!!Editors.findOne {userId: Meteor.userId()} // return true when called in Meteor shell, but is false when used in the method, but only on the server side
isAdmin: ->
!!Admins.findOne {userId: Meteor.userId()}
hasBasicPermissions: ->
console.log(Meteor.userId())
console.log(Admins)
res = !!Admins.findOne({userId: "9fZmAnoJubaGDZH64"}) or !!Admins.findOne({userId: "9fZmAnoJubaGDZH64"})
console.log res
return res
notAuthorisedError : ->
throw new Meteor.Error("not-authorized");
答案 0 :(得分:1)
我猜你是在一个只在客户端上执行代码的地方定义你的集合(@Admins = new Meteor.Collection('admins')
或类似的行):在client
文件夹的文件中,或者在Meteor.isClient
区块内。尝试将其放在共享代码中,例如在lib
或collections
文件夹中。