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

@@ -1,5 +1,6 @@
import Taro from '@tarojs/taro'
import { clearStorageByLoginUser } from '@/utils/server'
import type { User } from '@/api/system/user/model'
/**
* 登录态 / 游客态 标识。
@@ -34,3 +35,31 @@ export function ensureLoggedIn(redirect?: string): boolean {
export function logout() {
clearStorageByLoginUser()
}
/**
* 判断用户是否被禁用status === 1
*/
export function isUserDisabled(user?: User | null): boolean {
return user?.status === 1
}
/**
* 拦截被禁用的用户:清除登录态、弹窗提示、跳转登录页。
* 返回 false 表示用户已被禁用并已处理,调用方应中止后续流程。
*/
export function blockDisabledUser(user?: User | null): boolean {
if (!isUserDisabled(user)) return true
clearStorageByLoginUser()
Taro.showModal({
title: '账号已被禁用',
content: '您的账号已被管理员禁用,暂时无法使用小程序。如有疑问请联系门店客服。',
showCancel: false,
confirmText: '我知道了',
confirmColor: '#ee0a24',
success: () => {
Taro.reLaunch({ url: '/passport/login' })
},
})
return false
}