import { useMemo, useCallback, useContext } from 'react'; import type { TUser, PermissionTypes, Permissions } from 'librechat-data-provider'; import { AuthContext } from '~/hooks/AuthContext'; const useHasAccess = ({ permissionType, permission, }: { permissionType: PermissionTypes; permission: Permissions; }) => { const authContext = useContext(AuthContext); const user = authContext?.user; const roles = authContext?.roles; const isAuthenticated = authContext?.isAuthenticated || false; const checkAccess = useCallback( ({ user, permissionType, permission, }: { user?: TUser | null; permissionType: PermissionTypes; permission: Permissions; }) => { if (!authContext) { return false; } if (isAuthenticated && user?.role != null && roles && roles[user.role]) { return roles[user.role]?.permissions?.[permissionType]?.[permission] === true; } return false; }, [authContext, isAuthenticated, roles], ); const hasAccess = useMemo( () => checkAccess({ user, permissionType, permission }), [user, permissionType, permission, checkAccess], ); return hasAccess; }; export default useHasAccess;