# 授权验证检查清单（2026-07-25 实战总结）

每次修改销售工作台鉴权/权限逻辑后，按此清单逐项验证。

## V1: 登录验证

- [ ] 下拉框加载完整 23 人列表（含角色图标：👑 admin / 📊 manager / 💼 sales）
- [ ] admin 用户（刘新元）正常登录 → 显示完整看板+客户数据
- [ ] manager 用户（刘欣/吴云/韩远怀）正常登录
- [ ] sales 用户（李江辉等）正常登录
- [ ] 错误密码显示"密码错误"
- [ ] 不存在的用户显示"用户不存在"
- [ ] 上一次登录态 localStorage 缓存有效（刷新不要求重登录）

## V2: Tab 权限过滤

- [ ] admin 用户可见全部 8 个 Tab（📊看板 📋客户 📝访前 🎯商机 🔴客诉 📦订单 📅活动 ✅待办）
- [ ] sales 用户（tabs.dashboard=0）登录后侧栏无「📊 看板」Tab
- [ ] 切换用户后 renderNav 立即更新可见 Tab

## V3: 数据权限过滤

- [ ] admin 用户看板显示全公司 KPI（年度目标 6950 万等）
- [ ] admin 用户客户清单显示全部客户
- [ ] sales 用户客户清单仅显示 `salesperson === userName` 的客户
- [ ] manager 用户客户清单仅显示 `dept === userDept` 的客户
- [ ] 数据来源真实（非估算），如标注"数据加载失败"则不是权限问题

## V4: 飞书 OAuth 免登

- [ ] 飞书 App 配置了正确的重定向 URL
- [ ] 本地 Python 服务器 `/api/feishu/auth` 端点可访问
- [ ] 公网隧道（Cloudflare Tunnel / Tailscale Funnel）正常运行
- [ ] 飞书客户端打开 App → 自动跳转 → 免登成功

## V5: 持久性

- [ ] `state.user` 对象结构始终为 `{name, role, dept, tabs, email}`
- [ ] `AUTH[xxx]` 引用 100% 清除（`grep -n 'AUTH\[' xxx.html` 无结果）
- [ ] localStorage 存 `JSON.stringify(state.user)`，不是 role id 字符串
- [ ] 新增用户只需更新 CloudBase `user_roles` 集合 + 管理员页面
