diff --git a/client/src/hooks/AuthContext.tsx b/client/src/hooks/AuthContext.tsx index 3d000ff78e..2828a1bc5b 100644 --- a/client/src/hooks/AuthContext.tsx +++ b/client/src/hooks/AuthContext.tsx @@ -8,7 +8,7 @@ import { createContext, } from 'react'; import { useNavigate } from 'react-router-dom'; -import { useRecoilState, useRecoilValue } from 'recoil'; +import { useRecoilState } from 'recoil'; import { setTokenHeader, SystemRoles } from 'librechat-data-provider'; import type * as t from 'librechat-data-provider'; import { @@ -200,7 +200,7 @@ const AuthContextProvider = ({ }, isAuthenticated, }), - // eslint-disable-next-line react-hooks/exhaustive-deps + [user, error, isAuthenticated, token, userRole, adminRole], ); @@ -217,4 +217,4 @@ const useAuthContext = () => { return context; }; -export { AuthContextProvider, useAuthContext }; \ No newline at end of file +export { AuthContextProvider, useAuthContext, AuthContext }; diff --git a/client/src/hooks/Roles/useHasAccess.ts b/client/src/hooks/Roles/useHasAccess.ts index ecbffc2185..4cb8ab38ed 100644 --- a/client/src/hooks/Roles/useHasAccess.ts +++ b/client/src/hooks/Roles/useHasAccess.ts @@ -1,6 +1,6 @@ -import { useMemo, useCallback } from 'react'; -import { PermissionTypes, Permissions } from 'librechat-data-provider'; -import { useAuthContext } from '~/hooks/AuthContext'; +import { useMemo, useCallback, useContext } from 'react'; +import type { TUser, PermissionTypes, Permissions } from 'librechat-data-provider'; +import { AuthContext } from '~/hooks/AuthContext'; const useHasAccess = ({ permissionType, @@ -9,16 +9,31 @@ const useHasAccess = ({ permissionType: PermissionTypes; permission: Permissions; }) => { - const { isAuthenticated, user, roles } = useAuthContext(); + const authContext = useContext(AuthContext); + const user = authContext?.user; + const roles = authContext?.roles; + const isAuthenticated = authContext?.isAuthenticated || false; const checkAccess = useCallback( - ({ user, permissionType, permission }) => { + ({ + 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]?.[permissionType]?.[permission] === true; } return false; }, - [isAuthenticated, roles], + [authContext, isAuthenticated, roles], ); const hasAccess = useMemo(