|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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; |
|
|
|