diff --git a/front/src/modules/auth/hooks/useFetchCurrentUser.ts b/front/src/modules/auth/hooks/useFetchCurrentUser.ts index e21997f5d..30a2de89c 100644 --- a/front/src/modules/auth/hooks/useFetchCurrentUser.ts +++ b/front/src/modules/auth/hooks/useFetchCurrentUser.ts @@ -1,26 +1,13 @@ -import { useEffect } from 'react'; import jwt from 'jwt-decode'; -import { useRecoilState } from 'recoil'; -import { useGetCurrentUserQuery } from '~/generated/graphql'; +import { AuthTokenPair, useGetCurrentUserQuery } from '~/generated/graphql'; -import { currentUserState } from '../states/currentUserState'; -import { tokenPairState } from '../states/tokenPairState'; - -export function useFetchCurrentUser() { - const [, setCurrentUser] = useRecoilState(currentUserState); - const [tokenPair] = useRecoilState(tokenPairState); +export function useFetchCurrentUser(tokenPair: AuthTokenPair | null) { const userId = tokenPair?.accessToken.token ? jwt<{ sub: string }>(tokenPair.accessToken.token).sub : null; const { data } = useGetCurrentUserQuery({ variables: { uuid: userId }, }); - const user = data?.users?.[0]; - - useEffect(() => { - if (user) { - setCurrentUser(user); - } - }, [user, setCurrentUser]); + return data?.users?.[0]; } diff --git a/front/src/modules/auth/states/tokenPairState.ts b/front/src/modules/auth/states/tokenPairState.ts index 24bc61a91..c4a423467 100644 --- a/front/src/modules/auth/states/tokenPairState.ts +++ b/front/src/modules/auth/states/tokenPairState.ts @@ -7,7 +7,7 @@ const cookieStorageEffect = (key: string): AtomEffect => ({ setSelf, onSet }) => { const savedValue = cookieStorage.getItem(key); - if (savedValue != null) { + if (savedValue != null && JSON.parse(savedValue)['accessToken']) { setSelf(JSON.parse(savedValue)); } diff --git a/front/src/modules/ui/components/menu/DropdownMenuCheckableItem.tsx b/front/src/modules/ui/components/menu/DropdownMenuCheckableItem.tsx index 1202c40cc..03fbfaaf2 100644 --- a/front/src/modules/ui/components/menu/DropdownMenuCheckableItem.tsx +++ b/front/src/modules/ui/components/menu/DropdownMenuCheckableItem.tsx @@ -45,7 +45,7 @@ export function DropdownMenuCheckableItem({ return ( - + {children} diff --git a/front/src/providers/user/UserProvider.tsx b/front/src/providers/user/UserProvider.tsx index 88faf52f4..99490a067 100644 --- a/front/src/providers/user/UserProvider.tsx +++ b/front/src/providers/user/UserProvider.tsx @@ -1,9 +1,22 @@ +import { useEffect } from 'react'; +import { useRecoilState } from 'recoil'; + import { useFetchCurrentUser } from '@/auth/hooks/useFetchCurrentUser'; +import { currentUserState } from '@/auth/states/currentUserState'; +import { tokenPairState } from '@/auth/states/tokenPairState'; export const UserProvider: React.FC = ({ children, }) => { - useFetchCurrentUser(); + const [, setCurrentUser] = useRecoilState(currentUserState); + const [tokenPair] = useRecoilState(tokenPairState); + const user = useFetchCurrentUser(tokenPair); + + useEffect(() => { + if (user) { + setCurrentUser(user); + } + }, [setCurrentUser, user]); return <>{children}; }; diff --git a/server/src/ability/ability.factory.ts b/server/src/ability/ability.factory.ts index 33b895ed4..63c8be5e6 100644 --- a/server/src/ability/ability.factory.ts +++ b/server/src/ability/ability.factory.ts @@ -63,11 +63,13 @@ export class AbilityFactory { can(AbilityAction.Read, 'Company', { workspaceId: workspace.id }); can(AbilityAction.Create, 'Company'); can(AbilityAction.Update, 'Company', { workspaceId: workspace.id }); + can(AbilityAction.Delete, 'Company', { workspaceId: workspace.id }); // Person can(AbilityAction.Read, 'Person', { workspaceId: workspace.id }); can(AbilityAction.Create, 'Person'); can(AbilityAction.Update, 'Person', { workspaceId: workspace.id }); + can(AbilityAction.Delete, 'Person', { workspaceId: workspace.id }); // RefreshToken cannot(AbilityAction.Manage, 'RefreshToken');