无权限查找文档

Find Doc Without Permissions

我正在努力为安装了 Apostrophe CMS 的用户添加密码重置功能。我正在使用此代码通过电子邮件地址查找用户并创建一个新令牌供以后使用:(在 lib/modules/apostrophe-users/index.js 中)

module.exports = {
    construct: function(self, options) {
        self.route('post', 'send-reset-token', function (req, res) {
            var email = req.body.email;
            var usersModule = self.apos.modules['apostrophe-users'];
            var userList = usersMods.find(req, {email: email}, {permissions: false});
            userList.toArray(function (err, arr) {
                if (arr.length > 0) {
                    //Create token
                }
            });
        }
    }
}

但是,当此请求是从未登录会话(这是重置点)发出时,用户列表是空白的。我认为(通过阅读文档)将 options.permissions 参数设置为 false,它会让用户无需先检查权限,但它似乎不起作用。当我以管理员身份登录时进行此调用时,我可以正确获取用户。

在请求者没有查看用户权限的情况下,我还需要做些什么才能在服务器端找到这个用户吗?

find 的第二个参数是 MongoDB 条件对象。 permissions 不是集合中任何对象的 属性,因此您什么也得不到。

permission 是单数,它是一个游标过滤方法,而不是选项对象的 属性。我们不使用带有 find 的选项对象,因为可链接的过滤器方法更灵活、可记录和可测试。

您要找的是:

return usersModule.find(req, {email: email}).permission(false).toObject(function(err, user) {
  if (user) {
    // There was a user
  }
})

注意这里的permission是单数。

您唯一会发现它被描述为选项对象的一部分的地方是旧 0.5 版本的文档。 0.5 的官方文档在顶部有一个很大的警告。如果您在没有警告的情况下在页面上发现此信息,请告诉我,我可以努力解决这个问题。