blob: 9e5bb59acb181b8cab9e7353995a173d412ef1e1 [file] [log] [blame]
ybt02e716d2025-04-15 17:19:32 +08001import React, { createContext, useContext, useState, useEffect } from 'react';
2
3const AuthContext = createContext();
4
5export const AuthProvider = ({ children }) => {
6 const [user, setUser] = useState(null);
7 const [permissions, setPermissions] = useState([]);
8 const [loading, setLoading] = useState(true);
9
10 useEffect(() => {
11 // 从localStorage加载用户和权限信息
12 const storedUser = localStorage.getItem('user');
13 const storedPermissions = localStorage.getItem('permissions');
14
15 if (storedUser) {
16 setUser(JSON.parse(storedUser));
17 }
18
19 if (storedPermissions) {
20 setPermissions(JSON.parse(storedPermissions));
21 }
22
23 setLoading(false);
24 }, []);
25
26 // 检查用户是否有特定权限
27 const hasPermission = (permissionName) => {
28 return permissions.includes(permissionName);
29 };
30
31 // 检查用户是否有特定角色
32 const hasRole = (roleName) => {
33 return user?.role === roleName;
34 };
35
36 return (
37 <AuthContext.Provider value={{ user, permissions, hasPermission, hasRole, loading }}>
38 {children}
39 </AuthContext.Provider>
40 );
41};
42
43// 自定义hook方便使用
44export const useAuth = () => useContext(AuthContext);