From e13709e96d1de8dfa4703404c3e1cd843f9b4333 Mon Sep 17 00:00:00 2001 From: karimaldeen Date: Wed, 11 Sep 2024 16:50:06 +0300 Subject: [PATCH] add route permistion by user type --- src/App.tsx | 10 ++++++++-- src/Layout/Ui/SideBar.tsx | 5 +++++ src/Routes.tsx | 3 +++ src/Styles/Auth/Auth.scss | 25 ++++++++----------------- src/enums/UserType.ts | 6 ++++++ src/types/App.ts | 4 +++- src/utils/RoleByType.ts | 28 ++++++++++++++++++++++++++++ 7 files changed, 61 insertions(+), 20 deletions(-) create mode 100644 src/enums/UserType.ts create mode 100644 src/utils/RoleByType.ts diff --git a/src/App.tsx b/src/App.tsx index d28e884..352923b 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -5,11 +5,13 @@ import { Spin } from "antd"; import { hasAbility } from "./utils/hasAbility"; import { renderRoutesRecursively } from "./Components/Routes/RenderRoutesRecursively"; import { RenderRouteElement } from "./Components/Routes/RenderRouteElement"; +import { UserTypeEnum } from "./enums/UserType"; +import { RoleByType } from "./utils/RoleByType"; const Page404 = lazy(() => import("./Layout/Ui/NotFoundPage")); const Auth = lazy(() => import("./Pages/Auth/Page")); - const App = () => { + return ( { } /> + {renderRoutesRecursively(menuItems)} {CrudRoute.map((route) => { - const useAbility = hasAbility(route.abilities, route.abilities_value); + const useAbility = hasAbility(route.abilities, route.abilities_value); + if(!RoleByType(route)){ + return false ; + } if (!useAbility) { return false; } diff --git a/src/Layout/Ui/SideBar.tsx b/src/Layout/Ui/SideBar.tsx index 8c6c4bb..4810cd9 100644 --- a/src/Layout/Ui/SideBar.tsx +++ b/src/Layout/Ui/SideBar.tsx @@ -12,6 +12,7 @@ import { MenuItem } from "../../Components/Layout/SideBar/MenuItem"; import { CiMenuBurger, CiSettings } from "react-icons/ci"; import { IoIosMenu } from "react-icons/io"; import { HiMenuAlt2, HiMenuAlt3 } from "react-icons/hi"; +import { RoleByType } from "../../utils/RoleByType"; const SideBar = ({ isOpen, @@ -49,6 +50,10 @@ const SideBar = ({ if (!useAbility) { return ; } + if(!RoleByType(item)){ + + return ; + } return ( ; abilities: ABILITIES_ENUM; abilities_value: ABILITIES_VALUES_ENUM; + type?:UserTypeEnum prevPath: number; }; @@ -48,7 +51,6 @@ export interface CardData { percentage: number; Good?: boolean; } - export const nationalities: { value: string; label: string }[] = [ { label: "select.nationalities.Afghan", value: "Afghan" }, { label: "select.nationalities.Albanian", value: "Albanian" }, diff --git a/src/utils/RoleByType.ts b/src/utils/RoleByType.ts new file mode 100644 index 0000000..02139c0 --- /dev/null +++ b/src/utils/RoleByType.ts @@ -0,0 +1,28 @@ +import { USER_KEY } from "../config/AppKey"; +import { UserTypeEnum } from "../enums/UserType"; +import { getLocalStorage } from "./LocalStorage"; + +export const RoleByType = (item: { type?: string }):boolean=>{ + const type = item?.type ?? UserTypeEnum.ADMIN; + const LocalType = getLocalStorage(USER_KEY)?.type ?? undefined ; + const isAdmin = LocalType === UserTypeEnum.ADMIN ; + const isReSeller = LocalType === UserTypeEnum.RE_SELLER; + const isAdminRoute = type === UserTypeEnum.ADMIN ; + const isReSellerRoute = type === UserTypeEnum.RE_SELLER; + console.log(LocalType); + + if(!LocalType){ + return false + } + if(type === UserTypeEnum.PASS) { return true } ; + + if(isAdmin && isReSellerRoute ){ + return false ; + } + + if(isReSeller && !isReSellerRoute ){ + return false ; +} + + return true; +} \ No newline at end of file