# 个人主页访客/主人视角区分方案 ## 目标 区分"自己看自己的主页"和"看别人的主页"两种视角,访客视角隐藏所有隐私数据和个人信息。 --- ## 当前状态分析 | 当前已实现 | 需要修改 | |------------|----------| | `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()` 中: ```python 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. 检查侧边栏 → 积分/金币/收藏卡片对访客隐藏