Skip to content

Instantly share code, notes, and snippets.

View sirius0486's full-sized avatar

sirius sirius0486

View GitHub Profile
@sirius0486
sirius0486 / accessControl.tsx
Created March 19, 2025 17:42
access_control
// middleware.ts
import { NextResponse } from 'next/server'
export function middleware(request) {
const { pathname } = request.nextUrl
const userInfoCookie = request.cookies.get('user_info')?.value
// 解析用户信息(需错误处理)
const user = userInfoCookie ? JSON.parse(userInfoCookie) : null
@sirius0486
sirius0486 / auth-provider.tsx
Created March 18, 2025 08:45
auth-provider.tsx
"use client";
import { getCookie } from "@/lib/utils";
import { AuthContextType, UserInfo } from "@/types/user";
import { createContext, useContext, useEffect, useState } from "react";
const AuthContext = createContext<AuthContextType>({
userInfo: null,
hasRole: () => false,
});
@sirius0486
sirius0486 / page.tsx
Created March 14, 2025 02:57
sidebar
<html lang="en" suppressHydrationWarning>
<body
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
>
<ThemeProvider attribute="class" defaultTheme="system">
<Toaster />
<div className="relative flex min-h-screen w-full overflow-hidden">
<SidebarProvider>
<div className="sticky left-0 top-0 h-screen">
<AppSidebar />
@sirius0486
sirius0486 / useIssue.tsx
Created January 23, 2025 09:14
swr + zustand
// store/useIssueStore.ts
import create from 'zustand';
interface IssueStore {
issueId: number | null;
setIssueId: (issueId: number) => void;
}
const useIssueStore = create<IssueStore>((set) => ({
issueId: null,
@sirius0486
sirius0486 / api.tsx
Created January 20, 2025 15:44
useSWR snippet
// types.ts
export interface User {
id: string;
name: string;
email: string;
}
export interface Post {
id: string;
title: string;
@sirius0486
sirius0486 / package.json
Created December 3, 2024 01:32
package.json
{
"name": "admin-dashboard",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev --turbopack",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
@sirius0486
sirius0486 / maintenance.tsx
Last active November 25, 2024 03:37
maintenancePage
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"
import { Button } from "@/components/ui/button"
import { Mail, Clock, AlertTriangle } from 'lucide-react'
export default function MaintenancePage() {
return (
<div className="min-h-screen bg-background flex items-center justify-center p-4">
<Card className="w-full max-w-lg">
<CardHeader>
@sirius0486
sirius0486 / loading.tsx
Created November 4, 2024 06:00
loading.tsx
import { Loader2 } from "lucide-react"
import { Card, CardContent } from "@/components/ui/card"
export default function Loading() {
return (
<div className="absolute inset-0 z-50 flex items-center justify-center bg-background/80 backdrop-blur-sm">
<Card className="w-[300px]">
<CardContent className="flex flex-col items-center justify-center p-6">
<Loader2 className="h-10 w-10 animate-spin text-primary" />
<p className="mt-4 text-lg font-semibold text-primary">Loading...</p>
@sirius0486
sirius0486 / page.tsx
Created October 24, 2024 08:38
500page
import { Button } from "@/components/ui/button"
import { Card, CardContent, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"
import { AlertTriangle } from "lucide-react"
import Link from "next/link"
export default function Custom500() {
return (
<div className="min-h-screen flex items-center justify-center bg-gray-100 dark:bg-gray-900">
<Card className="w-full max-w-md">
<CardHeader>
@sirius0486
sirius0486 / not-authorized.tsx
Last active October 18, 2024 07:27
route.ts
import Link from "next/link"
import { AlertCircle } from "lucide-react"
import { Button } from "@/components/ui/button"
import {
Card,
CardContent,
CardDescription,
CardFooter,
CardHeader,