feat(auth): 实现禁用用户拦截机制防止禁用用户访问
- 新增工具函数 isUserDisabled 判断用户是否被禁用 - 新增 blockDisabledUser 函数拦截禁用用户,清除登录态弹窗提示并跳转登录页 - UserContext 启动时异步校验用户状态,禁用则拦截并退出 - UserContext 的 refreshUser、syncFromStorage、loginUser 接口均增加禁用检查 - 登录相关 API 登录前校验用户状态,禁用时拒绝登录 - 登录页面保存登录态前校验,禁用用户弹窗提示阻断登录流程 - 用户状态定义:status 0 为正常,1 为禁用 - 新增用户管理页支持查询和管理用户状态 - 文档中补充用户状态与禁用机制说明及拦截层级介绍
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user