| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | import { useState, useEffect } from 'react'; |
| | import { API } from '../../helpers'; |
| |
|
| | |
| | |
| | |
| | |
| | export const useUserPermissions = () => { |
| | const [permissions, setPermissions] = useState(null); |
| | const [loading, setLoading] = useState(true); |
| | const [error, setError] = useState(null); |
| |
|
| | |
| | const loadPermissions = async () => { |
| | try { |
| | setLoading(true); |
| | setError(null); |
| | const res = await API.get('/api/user/self'); |
| | if (res.data.success) { |
| | const userPermissions = res.data.data.permissions; |
| | setPermissions(userPermissions); |
| | console.log('用户权限加载成功:', userPermissions); |
| | } else { |
| | setError(res.data.message || '获取权限失败'); |
| | console.error('获取权限失败:', res.data.message); |
| | } |
| | } catch (error) { |
| | setError('网络错误,请重试'); |
| | console.error('加载用户权限异常:', error); |
| | } finally { |
| | setLoading(false); |
| | } |
| | }; |
| |
|
| | useEffect(() => { |
| | loadPermissions(); |
| | }, []); |
| |
|
| | |
| | const hasSidebarSettingsPermission = () => { |
| | return permissions?.sidebar_settings === true; |
| | }; |
| |
|
| | |
| | const isSidebarSectionAllowed = (sectionKey) => { |
| | if (!permissions?.sidebar_modules) return true; |
| | const sectionPerms = permissions.sidebar_modules[sectionKey]; |
| | return sectionPerms !== false; |
| | }; |
| |
|
| | |
| | const isSidebarModuleAllowed = (sectionKey, moduleKey) => { |
| | if (!permissions?.sidebar_modules) return true; |
| | const sectionPerms = permissions.sidebar_modules[sectionKey]; |
| |
|
| | |
| | if (sectionPerms === false) return false; |
| |
|
| | |
| | if (sectionPerms && sectionPerms[moduleKey] === false) return false; |
| |
|
| | return true; |
| | }; |
| |
|
| | |
| | const getAllowedSidebarSections = () => { |
| | if (!permissions?.sidebar_modules) return []; |
| |
|
| | return Object.keys(permissions.sidebar_modules).filter((sectionKey) => |
| | isSidebarSectionAllowed(sectionKey), |
| | ); |
| | }; |
| |
|
| | |
| | const getAllowedSidebarModules = (sectionKey) => { |
| | if (!permissions?.sidebar_modules) return []; |
| | const sectionPerms = permissions.sidebar_modules[sectionKey]; |
| |
|
| | if (sectionPerms === false) return []; |
| | if (!sectionPerms || typeof sectionPerms !== 'object') return []; |
| |
|
| | return Object.keys(sectionPerms).filter( |
| | (moduleKey) => |
| | moduleKey !== 'enabled' && sectionPerms[moduleKey] === true, |
| | ); |
| | }; |
| |
|
| | return { |
| | permissions, |
| | loading, |
| | error, |
| | loadPermissions, |
| | hasSidebarSettingsPermission, |
| | isSidebarSectionAllowed, |
| | isSidebarModuleAllowed, |
| | getAllowedSidebarSections, |
| | getAllowedSidebarModules, |
| | }; |
| | }; |
| |
|
| | export default useUserPermissions; |
| |
|