流星集合在服务器上空

时间:2015-09-12 13:30:10

标签: javascript mongodb meteor

我有一个名为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");

1 个答案:

答案 0 :(得分:1)

我猜你是在一个只在客户端上执行代码的地方定义你的集合(@Admins = new Meteor.Collection('admins')或类似的行):在client文件夹的文件中,或者在Meteor.isClient区块内。尝试将其放在共享代码中,例如在libcollections文件夹中。