如何实现新闻板块仅登录用户可见自身隐藏帖子的功能?
隐藏帖子权限控制实现方案
核心规则梳理
- 帖子分为两种状态:
post_status=1(公开)、post_status=0(隐藏) - 公开帖子所有用户可见;隐藏帖子仅发帖的登录用户本人能查看,其他用户完全看不到
- 新闻板块严格执行此规则:禁止向非发帖人展示隐藏帖子,仅允许登录用户自主切换自己帖子的公开/隐藏状态
核心SQL查询实现
查询帖子列表时,直接通过WHERE条件过滤出当前用户有权查看的内容:
SELECT * FROM post WHERE post_status = 1 OR (post_user = $user AND post_status = 0)
$user为当前登录用户的ID(未登录时此值为空,此时只会返回公开帖子)- 该条件确保:要么是所有用户都能看的公开帖子,要么是当前用户自己发布的隐藏帖子
配套代码逻辑补充
如果需要展示发帖用户的信息,先遍历查询到的帖子列表获取每个帖子的post_user(发帖用户ID),再执行用户信息查询:
-- 遍历帖子拿到$postUserId后执行 SELECT * FROM users WHERE user_id = $postUserId
注:无需额外权限校验,因为能出现在列表里的帖子要么是公开内容,要么是当前用户自己的帖子,对应的用户信息可正常展示。
额外注意事项
- 未登录用户访问时,
$user为空,WHERE条件会自动过滤所有隐藏帖子,仅返回公开内容 - 新闻板块要确保所有帖子列表查询都必须带上上述过滤条件,禁止出现绕过权限的查询入口
- 用户修改帖子状态时,需校验操作权限:仅允许用户修改自己发布的帖子的
post_status值
内容的提问来源于stack exchange,提问作者Bruno
相关产品推荐
相关产品推荐

