ybt | 02e716d | 2025-04-15 17:19:32 +0800 | [diff] [blame^] | 1 | import React, { createContext, useContext, useState, useEffect } from 'react'; |
| 2 | |
| 3 | const AuthContext = createContext(); |
| 4 | |
| 5 | export 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方便使用 |
| 44 | export const useAuth = () => useContext(AuthContext); |