# 游客模式权限控制文档

## 概述

本应用实现了简化的游客模式权限控制，仅针对4个关键动作进行登录拦截，其他功能游客可正常使用。

## 权限控制规则

### ✅ 游客可正常使用的功能
- 浏览首页商品
- 查看商品详情
- 搜索商品
- 浏览社区内容
- 购物车页面（可正常访问）
- 首页（无登录提示）
- 其他所有功能

### ❌ 需要登录的4个动作

1. **商品详情页-加入购物车按钮**
   - 触发条件：点击"加入购物车"按钮
   - 权限检查：`PROTECTED_ACTIONS.ADD_TO_CART`
   - 提示信息："加入购物车需要先登录"

2. **商品详情页-立即购买按钮**
   - 触发条件：点击"立即购买"按钮
   - 权限检查：`PROTECTED_ACTIONS.BUY_NOW`
   - 提示信息："立即购买需要先登录"

3. **点击"我的"tab**
   - 触发条件：点击底部导航栏的"我的"按钮
   - 权限检查：`PROTECTED_ACTIONS.VIEW_MY_PAGE`
   - 提示信息："访问'我的'页面需要先登录"

4. **点击"乐购"tab**
   - 触发条件：点击底部导航栏的"乐购"按钮
   - 权限检查：`PROTECTED_ACTIONS.VIEW_LEGOU`
   - 提示信息："访问'乐购'页面需要先登录"

## 技术实现

### 核心文件

1. **`utils/auth.js`** - 权限控制核心逻辑（仅4个动作）
2. **`pages/product/detail.vue`** - 商品详情页权限检查
3. **`pages/user/index.vue`** - 我的页面权限检查
4. **`pages/legou/index.vue`** - 乐购页面权限检查
5. **`pages/test/auth-test.vue`** - 权限测试页面

### 权限检查流程

```javascript
// 1. 检查登录状态
if (isLoggedIn()) {
    // 已登录，执行操作
    callback()
} else {
    // 未登录，显示提示并跳转登录
    showLoginModal()
}
```

### 权限拦截器

```javascript
export function requireAuth(callback, options = {}) {
    if (isLoggedIn()) {
        // 已登录，执行回调
        if (typeof callback === 'function') {
            callback()
        }
        return true
    } else {
        // 未登录，显示提示并跳转登录
        const message = options.message || actionMessages[options.action]
        showLoginModal(message, options.returnUrl)
        return false
    }
}
```

## 页面权限检查实现

### 商品详情页 (`pages/product/detail.vue`)

```javascript
// 加入购物车
addToCart() {
    requireAuth(() => {
        // 执行加入购物车逻辑
        console.log('🛒 加入购物车:', this.productId)
    }, {
        action: PROTECTED_ACTIONS.ADD_TO_CART,
        returnUrl: `/pages/product/detail?id=${this.productId}`
    })
},

// 立即购买
buyNow() {
    requireAuth(() => {
        // 执行立即购买逻辑
        console.log('🛒 立即购买:', this.productId)
    }, {
        action: PROTECTED_ACTIONS.BUY_NOW,
        returnUrl: `/pages/product/detail?id=${this.productId}`
    })
}
```

### 我的页面 (`pages/user/index.vue`)

```javascript
onShow() {
    this.checkLoginStatus()
    // 无论是否登录都进行权限检查，确保游客模式下能正确触发登录
    this.checkAuthAccess()
    this.updateTabBar()
},

checkAuthAccess() {
    requireAuth(() => {
        console.log('用户已登录，可以访问个人中心')
        this.checkLoginStatus()
    }, {
        action: PROTECTED_ACTIONS.VIEW_MY_PAGE,
        message: '访问个人中心需要先登录'
    })
}
```

### 乐购页面 (`pages/legou/index.vue`)

```javascript
onShow() {
    // 乐购页面需要登录权限，无论是否登录都进行权限检查
    this.checkAuthAccess()
    this.updateTabBar()
},

checkAuthAccess() {
    requireAuth(() => {
        console.log('用户已登录，可以访问乐购')
    }, {
        action: PROTECTED_ACTIONS.VIEW_LEGOU,
        message: '访问乐购页面需要先登录'
    })
}
```

## 测试方法

### 使用权限测试页面

访问 `/pages/test/auth-test` 页面可以测试所有权限控制功能：

1. **测试加入购物车** - 模拟商品详情页的加入购物车操作
2. **测试立即购买** - 模拟商品详情页的立即购买操作
3. **测试我的页面** - 模拟点击"我的"tab的操作
4. **测试乐购页面** - 模拟点击"乐购"tab的操作

### 测试步骤

1. 确保处于游客模式（未登录状态）
2. 点击任意测试按钮
3. 验证是否弹出登录提示
4. 点击"去登录"验证跳转
5. 登录成功后返回测试页面
6. 再次点击测试按钮验证权限通过

## 用户体验

### 游客模式体验
- 可以正常使用大部分功能
- 可以浏览商品、查看详情、搜索等
- 点击4个受限动作时，会弹出友好的登录提示
- 提供便捷的登录入口

### 登录后体验
- 所有功能正常使用
- 登录状态持久化
- 支持退出登录

## 注意事项

1. **权限检查时机**：在页面 `onShow` 生命周期中进行权限检查
2. **返回地址**：登录成功后会返回到触发登录的页面
3. **状态同步**：登录状态变更后需要及时更新页面状态
4. **错误处理**：权限检查失败时提供友好的错误提示

## 扩展说明

如需添加新的权限控制点，只需：

1. 在 `PROTECTED_ACTIONS` 中添加新的action类型
2. 在 `actionMessages` 中添加对应的提示信息
3. 在相应页面调用 `requireAuth` 函数

```javascript
// 添加新的权限控制点
requireAuth(() => {
    // 执行需要登录的操作
}, {
    action: PROTECTED_ACTIONS.NEW_ACTION,
    returnUrl: '/pages/current/page'
})
```

## 注意事项

- 当前仅保留4个核心动作的权限控制
- 其他功能游客可正常使用，无需登录
- 权限检查仅在特定动作触发时进行
- 页面访问不再进行权限拦截
- 社区和购物车页面游客可正常访问，不会提示登录
- 首页不再显示登录提示，游客可直接使用
