You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查文章状态(草稿/待审/私密发布)及修复权限问题

解决方案:检查文章状态 + 修复私密文章权限问题

嘿,我来帮你搞定这两个问题,一步步来:

一、如何检查文章状态为草稿(draft)或待审核(pending)

首先得确认你的文章数据模型里有一个存储状态的字段(通常叫status),值一般是字符串类型(比如"draft"、"pending"、"published"、"private"这类)。

检查状态的核心逻辑就是判断文章的status值是否匹配目标状态,不同编程语言的写法类似:

  • Python示例:
    # 检查是否是草稿或待审核
    if article.status in ["draft", "pending"]:
        # 执行对应逻辑(比如提示用户文章未发布)
    
  • JavaScript示例:
    // 检查是否是草稿或待审核
    if (article.status === 'draft' || article.status === 'pending') {
        // 执行对应逻辑
    }
    

本质就是判断状态值是否在你定义的目标状态集合里就行。

二、修复私密发布文章的权限问题

先分析你现有逻辑的问题:

现有代码逻辑为:若文章状态非草稿或用户已登录,则渲染文章,否则重定向至404页面。

这个逻辑的问题出在**或(or)的条件判断**上——只要文章不是草稿(比如私密发布的文章),哪怕用户未登录,第一个条件文章状态非草稿就会成立,所以会直接渲染文章,导致私密内容泄露。

正确的权限逻辑

我们需要调整为:只有当用户已登录,或者文章是公开状态(既不是草稿也不是私密发布)时,才允许渲染文章。反之,如果文章是草稿/私密,且用户未登录,就重定向到404。

给你几个常见场景的代码示例:

Python(Django框架)

# 假设request是请求对象,article是当前文章实例
if request.user.is_authenticated or (article.status != 'draft' and article.status != 'private'):
    # 渲染文章页面
    return render(request, 'article_detail.html', {'article': article})
else:
    # 重定向到404页面
    return redirect('404')

或者用更直观的否定判断(先拦截不符合条件的情况):

if (article.status == 'draft' or article.status == 'private') and not request.user.is_authenticated:
    return redirect('404')
# 剩下的情况都允许渲染
return render(request, 'article_detail.html', {'article': article})

JavaScript(Node.js/Express)

app.get('/article/:id', (req, res) => {
  const article = getArticleById(req.params.id); // 假设这是获取文章的函数
  const isUserLoggedIn = req.isAuthenticated(); // 假设判断用户登录的函数

  // 检查权限:如果文章是草稿/私密且用户未登录,返回404
  if ((article.status === 'draft' || article.status === 'private') && !isUserLoggedIn) {
    return res.status(404).send('Page not found');
  }

  // 否则渲染文章
  res.render('article', { article });
});

关键注意点

  1. 确保你的文章模型里确实有private这个状态值,并且私密发布的文章被正确设置为status: "private";
  2. 测试边界情况:比如未登录用户访问草稿、未登录用户访问私密文章、登录用户访问这两类文章,确认权限表现符合预期。

内容的提问来源于stack exchange,提问作者Neelam Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:45:55