"use client" import { usePermissionStore } from "@/components/label/store/auth" import { usePathname } from "next/navigation" interface PermissionItem { [x: string]: [boolean, null, string] } type PermissionMap = { [x: string]: PermissionItem } const mappingList: { [x: string]: [string, string] } = { "/person/dashboard": ["task", "view"], "/person/report": ["daily_work", "self_view"], "/person/workload": ["workload", "self_view"], } export const headerBarCheckItems = (data: PermissionMap) => { const projectTitle = [ ["daily_work", "self_view"], ["label_schema", "view"], ["project", "view"], ["task", "view"], ] as const let projectVisible = false projectTitle.forEach(([prop, subProp]) => { if (data[prop] && data[prop][subProp] && data[prop][subProp][0]) { projectVisible = true } }) const staffTitle = [ ["daily_work", "team_view"], ["user", "view"], ["user", "group_view"], ] as const let staffVisible = false staffTitle.forEach(([prop, subProp]) => { if (data[prop] && data[prop][subProp] && data[prop][subProp][0]) { staffVisible = true } }) return [projectVisible, staffVisible] } const useAuth = () => { const pathname = usePathname() const detailInfo = usePermissionStore((s) => s.detailInfo) const permission = detailInfo?.permissions as PermissionMap | undefined const roleName: string[] = detailInfo?.role_name ?? [] return { hasPermission: () => { if ( [ "/", "/login", "/management", "/management/person/dashboard", "/management/team", ].includes(pathname) ) { return true } if (!permission) return false if (mappingList[pathname]) { const [prop, subProp] = mappingList[pathname] return ( !!permission[prop] && !!permission[prop][subProp] && !!permission[prop][subProp][0] ) } return false }, // path 跳转是否可见 canNv: (path: string, type = "view") => { if (!permission) return false if (mappingList[path]) { const [prop] = mappingList[path] return ( !!permission[prop] && !!permission[prop][type] && !!permission[prop][type][0] ) } return false }, // 当前页面是否可见某个操作 isShow: (type = "view") => { if (!permission) return false if (mappingList[pathname]) { const [prop] = mappingList[pathname] return ( !!permission[prop] && !!permission[prop][type] && !!permission[prop][type][0] ) } return false }, checkRole: (name: string) => { if (!name) return false return roleName.includes(name) }, } } export default useAuth