Files
labelimage/app/store/user.ts
2026-03-10 17:06:22 +08:00

86 lines
1.9 KiB
TypeScript

import { create } from "zustand"
import { persist } from "zustand/middleware"
interface RbacDataItem {
app: string
cat: string
platform: string
tenant: string
permission: {
[x: string]: {
[y: string]: [boolean, any, string]
}
}
}
interface UserState {
tenant: string
user_info: {
[x: string]: string
}
rbac: {
data: RbacDataItem[]
}
needResetPassword: boolean
access_token: string
refresh_token: string
setUserInfo: (
tenant: string,
user_info: {
[x: string]: string
},
rbac: {
data: RbacDataItem[]
}
) => void
removeUserInfo: () => void
refreshToken: (params: {
access_token: string
refresh_token: string
}) => void
setNeedResetPassword: (needResetPassword: boolean) => void
}
const initialUserState = {
tenant: "",
user_info: {},
rbac: {
data: [],
},
needResetPassword: false,
access_token: "",
refresh_token: "",
}
export const useUserStore = create(
persist<UserState>(
(set) => ({
tenant: initialUserState.tenant,
user_info: initialUserState.user_info,
rbac: initialUserState.rbac,
needResetPassword: initialUserState.needResetPassword,
access_token: initialUserState.access_token,
refresh_token: initialUserState.refresh_token,
setUserInfo: (tenant, user_info, rbac) =>
set((state) => {
return { ...state, tenant: tenant, user_info: user_info, rbac: rbac }
}),
removeUserInfo: () =>
set((state) => {
return { ...state, ...initialUserState }
}),
setNeedResetPassword: (needResetPassword) =>
set((state) => {
return { ...state, needResetPassword: needResetPassword }
}),
refreshToken: ({ access_token, refresh_token }) =>
set((state) => {
return { ...state, access_token, refresh_token }
}),
}),
{
name: "user-store",
}
)
)