access.ts 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import { create } from "zustand";
  2. import { persist } from "zustand/middleware";
  3. import { getClientSideConfig } from "../config/client";
  4. export interface AccessControlStore {
  5. accessCode: string;
  6. token: string;
  7. updateToken: (_: string) => void;
  8. updateCode: (_: string) => void;
  9. enabledAccessControl: () => boolean;
  10. isAuthorized: () => boolean;
  11. }
  12. export const ACCESS_KEY = "access-control";
  13. export const useAccessStore = create<AccessControlStore>()(
  14. persist(
  15. (set, get) => ({
  16. token: "",
  17. accessCode: "",
  18. enabledAccessControl() {
  19. return !!getClientSideConfig()?.needCode;
  20. },
  21. updateCode(code: string) {
  22. set((state) => ({ accessCode: code }));
  23. },
  24. updateToken(token: string) {
  25. set((state) => ({ token }));
  26. },
  27. isAuthorized() {
  28. // has token or has code or disabled access control
  29. return (
  30. !!get().token || !!get().accessCode || !get().enabledAccessControl()
  31. );
  32. },
  33. }),
  34. {
  35. name: ACCESS_KEY,
  36. version: 1,
  37. },
  38. ),
  39. );