fix: improve auth store with user state and role validation

This commit is contained in:
zetaloop
2026-02-20 20:40:25 +08:00
parent 9267df9ea1
commit 6008aa9b04
4 changed files with 38 additions and 17 deletions
+25 -6
View File
@@ -1,20 +1,39 @@
import { create } from "zustand"
import type { UserRole } from "@/lib/types"
import type { User, UserRole } from "@/lib/types"
interface AuthState {
isAuthenticated: boolean
currentRole: UserRole
verifiedRoles: UserRole[]
user: User | null
switchRole: (role: UserRole) => void
login: () => void
login: (user: User, verifiedRoles?: UserRole[]) => void
logout: () => void
}
export const useAuthStore = create<AuthState>((set) => ({
export const useAuthStore = create<AuthState>((set, get) => ({
isAuthenticated: false,
currentRole: "consumer",
verifiedRoles: ["consumer"],
switchRole: (role) => set({ currentRole: role }),
login: () => set({ isAuthenticated: true }),
logout: () => set({ isAuthenticated: false, currentRole: "consumer" }),
user: null,
switchRole: (role) => {
const { verifiedRoles } = get()
if (verifiedRoles.includes(role)) {
set({ currentRole: role })
}
},
login: (user, verifiedRoles = ["consumer"]) =>
set({
isAuthenticated: true,
user,
currentRole: user.role,
verifiedRoles,
}),
logout: () =>
set({
isAuthenticated: false,
currentRole: "consumer",
verifiedRoles: ["consumer"],
user: null,
}),
}))