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

131 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 个人主页访客/主人视角区分方案
## 目标
区分"自己看自己的主页"和"看别人的主页"两种视角,访客视角隐藏所有隐私数据和个人信息。
---
## 当前状态分析
| 当前已实现 | 需要修改 |
|------------|----------|
| `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. 检查侧边栏 → 积分/金币/收藏卡片对访客隐藏