diff --git a/src/contexts/AuthContext.jsx b/src/contexts/AuthContext.jsx
new file mode 100644
index 0000000..9e5bb59
--- /dev/null
+++ b/src/contexts/AuthContext.jsx
@@ -0,0 +1,44 @@
+import React, { createContext, useContext, useState, useEffect } from 'react';
+
+const AuthContext = createContext();
+
+export const AuthProvider = ({ children }) => {
+  const [user, setUser] = useState(null);
+  const [permissions, setPermissions] = useState([]);
+  const [loading, setLoading] = useState(true);
+  
+  useEffect(() => {
+    // 从localStorage加载用户和权限信息
+    const storedUser = localStorage.getItem('user');
+    const storedPermissions = localStorage.getItem('permissions');
+    
+    if (storedUser) {
+      setUser(JSON.parse(storedUser));
+    }
+    
+    if (storedPermissions) {
+      setPermissions(JSON.parse(storedPermissions));
+    }
+    
+    setLoading(false);
+  }, []);
+  
+  // 检查用户是否有特定权限
+  const hasPermission = (permissionName) => {
+    return permissions.includes(permissionName);
+  };
+  
+  // 检查用户是否有特定角色
+  const hasRole = (roleName) => {
+    return user?.role === roleName;
+  };
+  
+  return (
+    <AuthContext.Provider value={{ user, permissions, hasPermission, hasRole, loading }}>
+      {children}
+    </AuthContext.Provider>
+  );
+};
+
+// 自定义hook方便使用
+export const useAuth = () => useContext(AuthContext);
\ No newline at end of file
diff --git a/src/contexts/AuthContext.test.jsx b/src/contexts/AuthContext.test.jsx
new file mode 100644
index 0000000..9536be2
--- /dev/null
+++ b/src/contexts/AuthContext.test.jsx
@@ -0,0 +1,48 @@
+import { describe, it, expect, beforeEach } from 'vitest';
+import { render, screen } from '@testing-library/react';
+import { AuthProvider, useAuth } from './AuthContext';
+
+// 创建一个测试组件来使用 useAuth hook
+const TestComponent = () => {
+  const { user, hasRole } = useAuth();
+  return (
+    <div>
+      <div data-testid="user-info">{user ? JSON.stringify(user) : 'no user'}</div>
+      <div data-testid="is-admin">{hasRole('admin') ? 'is admin' : 'not admin'}</div>
+    </div>
+  );
+};
+
+describe('AuthContext', () => {
+  beforeEach(() => {
+    window.localStorage.clear();
+  });
+
+  it('应该提供默认值', () => {
+    render(
+      <AuthProvider>
+        <TestComponent />
+      </AuthProvider>
+    );
+    
+    expect(screen.getByTestId('user-info')).toHaveTextContent('no user');
+    expect(screen.getByTestId('is-admin')).toHaveTextContent('not admin');
+  });
+
+  it('应该从 localStorage 加载用户信息', () => {
+    // 模拟管理员
+    window.localStorage.setItem('user', JSON.stringify({ 
+      username: 'admin', 
+      role: 'admin' 
+    }));
+    
+    render(
+      <AuthProvider>
+        <TestComponent />
+      </AuthProvider>
+    );
+    
+    expect(screen.getByTestId('user-info')).toHaveTextContent('admin');
+    expect(screen.getByTestId('is-admin')).toHaveTextContent('is admin');
+  });
+});
\ No newline at end of file
