86 lines
1.9 KiB
TypeScript
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",
|
|
}
|
|
)
|
|
)
|