fix: improve auth store with user state and role validation
This commit is contained in:
+25
-6
@@ -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,
|
||||
}),
|
||||
}))
|
||||
|
||||
Reference in New Issue
Block a user