【问题标题】:Trying to simplify access to private posts with Express尝试使用 Express 简化对私人帖子的访问
【发布时间】:2017-06-27 16:31:40
【问题描述】:

我正在使用 MongoDB 和 Express 学习 Node.js,进展顺利。

我的用户注册工作正常,每个用户都可以创建帖子。

现在我正在尝试更复杂的事情,我希望用户创建私人帖子,并且只有创建它的用户和其他允许的用户才能看到帖子。

我做了一些事情,它似乎有效,但我认为可以以更好的方式完成。

我现在要在这个地址www.mywebsite.com/post-title 收到帖子是这样的:

Post
  .findOne({ permalink: req.params.permalink })
  .exec(function(err, post) {
    if (!post) {
      req.flash('errors', { msg: 'Post not found' });
      return res.redirect('/');
    } else {
      if (post._creator == req.user.id) {
        res.render('post/home', {
          title: post.name,
          post: post
        });
      } else {
        req.flash('errors', { msg: 'You are not allowed to see this post' });
        res.redirect('/');
      }
    }
  });

它工作正常,但如果我想在这篇文章中添加更多选项并创建另一个链接,例如:www.mywebsite.com/post-title/tags 以获取该页面,我必须重复上面发布的整个代码......

我希望找到一种方法来轻松匹配帖子的所有者或允许的人,以及一种通过永久链接获取帖子的方法,而无需为每个 get 使用 fineOne...

这可能吗? 有意义吗?

谢谢

【问题讨论】:

    标签: javascript node.js mongodb mongoose mongodb-query


    【解决方案1】:

    我可能会帮助您“简化”您的问题并解释您想要做什么。但是那些花时间阅读所有内容的人最终会发现您基本上想要

    " 列出所有帖子,包括当前用户的私人帖子和允许帖子。"

    这基本上是问题的简化版本。

    因此,您基本上只需要“发布”文档中允许访问控制的一些字段:

    {
        "title": "this is the title",
        "permalink": "some/sort/of/slug",
        "body": "post body here",
        "creator": "Bill",
        "_private": true,
        "_allowed": ["Ted","Fred"]
    }
    

    所以基本上你不会关心“私人”是false 的“_allowed”列表,但你确实想关心这是真的。因此,您希望在查询中使用此逻辑,而不是对检索到的每个文档进行评估:

    Post.find(
        {
            "$or": [
                { "_private": false },
                {
                  "_private": true,
                  "$or": [
                      { "creator": req.user.id },
                      { "_allowed": req.user.id }
                   ]
                }
             }
        },
        function(err,docs) {
    

    所以本质上,您的逻辑基于嵌套的$or 操作,该操作允许显示公共帖子或以其他方式显示帖子是私有的,然后只有“创建者”$or“_allowed”用户将在任何查询。

    该逻辑适用于您是检索帖子列表以获取分页结果,还是调用单个帖子以进行单个深度显示。

    【讨论】:

    • 太棒了!我创建了一个简单的中间件,它很完美!感谢您的帮助。
    猜你喜欢
    • 2015-10-20
    • 1970-01-01
    • 2013-10-16
    • 2020-03-28
    • 2016-01-18
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    • 2016-05-10
    相关资源
    最近更新 更多