feat(auth): 实现禁用用户拦截机制防止禁用用户访问

- 新增工具函数 isUserDisabled 判断用户是否被禁用
- 新增 blockDisabledUser 函数拦截禁用用户,清除登录态弹窗提示并跳转登录页
- UserContext 启动时异步校验用户状态,禁用则拦截并退出
- UserContext 的 refreshUser、syncFromStorage、loginUser 接口均增加禁用检查
- 登录相关 API 登录前校验用户状态,禁用时拒绝登录
- 登录页面保存登录态前校验,禁用用户弹窗提示阻断登录流程
- 用户状态定义:status 0 为正常,1 为禁用
- 新增用户管理页支持查询和管理用户状态
- 文档中补充用户状态与禁用机制说明及拦截层级介绍
This commit is contained in:
2026-07-14 23:11:29 +08:00
parent dc123d79a2
commit c870e75b3b
8 changed files with 141 additions and 2 deletions

View File

@@ -13,3 +13,13 @@
- 入口:`src/pages/store/center/index.tsx` FEATURE_CARDS 中,在 VIP会员审核上方加了"用户管理"卡片(蓝色主题 👥 图标)
- 路由注册:`src/app.config.ts` 新增 `pages/store/users/index`
## 禁用用户拦截(防止被禁用用户仍可浏览小程序)
- 新增工具函数:`src/utils/auth.ts``isUserDisabled(user)``blockDisabledUser(user)`(清登录态+弹窗+跳转登录页)
- 拦截层级:
1. **UserContext 启动校验**`src/contexts/UserContext.tsx`init 时先用缓存快速显示,再异步调 `getUserInfo()` 校验 status若被禁用则 `blockDisabledUser` 拦截
2. **UserContext refreshUser / syncFromStorage / loginUser**:均加了 `isUserDisabled` 检查
3. **登录 API**`src/api/passport/login/index.ts``login()``loginBySms()``saveStorageByLoginUser` 前检查 status被禁用则 reject
4. **登录页面**`passport/login.tsx``passport/register.tsx``pages/store/login/index.tsx` 在保存登录态前检查 status被禁用则弹窗拦截
- 用户状态约定:`status === 0` 正常,`status === 1` 禁用(通过 `updateUserStatus(userId, status)` 接口控制)