From f362f18870b842a060bf11c20ea6ffd8c8fc8a59 Mon Sep 17 00:00:00 2001 From: Danny Avila Date: Mon, 24 Feb 2025 22:52:54 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=97=20fix:=20Shared=20Link=20with=20Ma?= =?UTF-8?q?rkdown=20Code=20Error=20(#6016)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: Export AuthContext from AuthContextProvider * refactor: Update useHasAccess to utilize useContext for AuthContext * refactor: Enhance type definitions in useHasAccess for better type safety --- client/src/hooks/AuthContext.tsx | 6 +++--- client/src/hooks/Roles/useHasAccess.ts | 27 ++++++++++++++++++++------ 2 files changed, 24 insertions(+), 9 deletions(-) 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(