import { createContext, useState, useCallback, ReactNode } from 'react' import { UserInfo, PermissionContextType, checkVersionLevel, UserVersion } from './types' /** * 权限上下文 * * @description 提供全局权限状态管理 * @version Week 2 Day 7 - 任务17 * * 注意:当前阶段(Week 2)用户信息为硬编码,方便开发测试 * 后续计划:Week 2 Day 8-9 对接后端JWT认证 */ /** * 模拟用户数据(开发阶段使用) * * 🔧 开发说明: * - 当前硬编码为 premium 权限,可以访问所有模块 * - 方便开发和测试所有功能 * - 后续将从后端 JWT token 中解析真实用户信息 */ const MOCK_USER: UserInfo = { id: 'test-user-001', name: '测试研究员', email: 'test@example.com', version: 'premium', // 👈 硬编码为最高权限 avatar: null, isTrial: false, trialEndsAt: null, } /** * 创建权限上下文 */ export const PermissionContext = createContext(undefined) /** * 权限提供者组件 */ interface PermissionProviderProps { children: ReactNode } export const PermissionProvider = ({ children }: PermissionProviderProps) => { // 当前用户状态(开发阶段使用模拟数据) const [user, setUser] = useState(MOCK_USER) /** * 检查模块权限 * @param requiredVersion 所需权限等级 * @returns 是否有权限访问 */ const checkModulePermission = useCallback( (requiredVersion?: UserVersion): boolean => { // 未登录用户无权限 if (!user) return false // 没有权限要求,允许访问 if (!requiredVersion) return true // 检查权限等级 return checkVersionLevel(user.version, requiredVersion) }, [user] ) /** * 检查功能权限 * @param feature 功能标识 * @returns 是否有权限使用该功能 * * TODO: 后续可以基于功能列表进行更细粒度的权限控制 */ const checkFeaturePermission = useCallback( (feature: string): boolean => { if (!user) return false // 当前简化实现:premium用户拥有所有功能 if (user.version === 'premium') return true // 后续可以扩展为基于功能配置表的权限检查 console.log('Feature permission check:', feature) return true }, [user] ) /** * 退出登录 */ const logout = useCallback(() => { setUser(null) // TODO: 清除后端session/token console.log('User logged out') }, []) const value: PermissionContextType = { user, isAuthenticated: !!user, checkModulePermission, checkFeaturePermission, setUser, logout, } return ( {children} ) } /** * 🔧 开发说明:权限系统演进计划 * * 【当前阶段 - Week 2】 * - ✅ 用户信息:硬编码为 premium * - ✅ 权限检查:基于 UserVersion 等级 * - ✅ 功能完整:支持模块级权限控制 * * 【Week 2 Day 8-9 - 对接后端】 * - [ ] 从后端获取真实用户信息 * - [ ] 解析 JWT token 获取用户权限 * - [ ] 实现登录/登出功能 * - [ ] 集成用户管理API * * 【Week 3-4 - ASL开发】 * - [ ] 在ASL模块中应用权限控制 * - [ ] 实现功能级权限(如:LLM模型选择权限) * - [ ] 添加试用期限制逻辑 * * 【Week 5+ - 完善】 * - [ ] 动态权限配置 * - [ ] 权限缓存优化 * - [ ] 权限变更实时通知 */