Files
vscode-workbench/.trae/documents/userhome-visibility-plan.md
T

3.7 KiB
Raw Blame History

个人主页访客/主人视角区分方案

目标

区分"自己看自己的主页"和"看别人的主页"两种视角,访客视角隐藏所有隐私数据和个人信息。


当前状态分析

当前已实现 需要修改
isOwner 判断逻辑 后端 API 返回敏感数据给访客
数据分析标签页仅主人可见 侧边栏积分/金币卡片对所有人可见
封面上传仅主人可见 访客可见加入时间、地区、性别
快捷操作仅主人可见
不同操作按钮(关注/发消息/拉黑)

访客隐藏内容清单

完全隐藏(整个区块不渲染)

  • 数据分析标签页(已处理)
  • 快捷操作侧边栏(已处理)
  • 积分/金币信息卡片
  • 最近收藏卡片
  • 封面上传按钮(已处理)
  • 个人统计中的具体数值(文章数、粉丝数、关注数、点赞数)

个人信息部分隐藏

  • 加入时间 → 隐藏
  • 地区 → 隐藏
  • 性别 → 隐藏
  • 积分/金币 → 隐藏

访客可见内容

  • 用户名
  • 头像
  • 个性签名
  • 文章标签页(公开文章列表)
  • 关注按钮 / 发消息按钮 / 拉黑按钮

实现方案

1. 后端修改

文件 修改
user/views/user.py PublicProfileAPIView 新增 is_owner 判断,访客不返回 points、coins、analytics、date_joined、location、gender 等敏感字段

2. 前端修改

文件 修改
UserHome.tsx 侧边栏积分/金币卡片增加 isOwner 判断
UserHome.tsx 侧边栏最近收藏卡片增加 isOwner 判断
UserHome.tsx Hero 区域隐藏加入时间、地区、性别(非主人)
UserHome.tsx 统计数字区域对访客隐藏具体数值
UserHome.css 访客模式下的统计区域样式适配

3. 国际化

文件 修改
zh.json / en.json / ja.json / ko.json / ru.json / zh-TW.json 新增 userHome.visitor.hiddenStats 翻译

详细实现步骤

Step 1: 后端 PublicProfileAPIView 修改

在 user/views/user.py 的 PublicProfileAPIView.get() 中:

is_owner = request.user.is_authenticated and request.user.id == user_id

data = {
    'id': user.id,
    'username': user.username,
    'avatar': user.avatar.url if user.avatar else '',
    'bio': user.bio or '',
    # ... 仅对主人返回的字段
}

if is_owner:
    data.update({
        'points': user.points,
        'coins': user.coins,
        'date_joined': user.date_joined.strftime('%Y-%m-%d'),
        'gender': user.get_gender_display(),
        'location': user.location or '',
        'analytics': analytics,
        'follower_count': 0,  # 实际需要查询
        'following_count': 0,
        'like_count': 0,
    })
else:
    # 访客可见字段
    data.update({
        'date_joined': None,
        'gender': '',
        'location': '',
    })

Step 2: 前端 UserHome.tsx 修改

Hero 区域(用户信息头部):

  • 非主人时隐藏:加入时间、地区、性别图标
  • 非主人时隐藏:统计数字(文章数、粉丝数等),替换为"关注查看"提示

侧边栏:

  • 积分/金币卡片:增加 {isOwner && (...)} 条件渲染
  • 最近收藏卡片:增加 {isOwner && (...)} 条件渲染

Step 3: CSS 适配

添加 .userhome-stats-row--visitor 样式,使统计区域在访客模式下居中显示提示文字。


验证步骤

  1. 登录后访问自己的主页 → 确认所有信息可见,数据分析可用
  2. 访问他人主页 → 确认仅显示用户名、头像、签名、文章列表
  3. 未登录访问他人主页 → 同上
  4. 检查侧边栏 → 积分/金币/收藏卡片对访客隐藏