diff --git a/fems-api/src/controllers/app/auth/auth.controller.js b/fems-api/src/controllers/app/auth/auth.controller.js index 169f041..bbfdcad 100644 --- a/fems-api/src/controllers/app/auth/auth.controller.js +++ b/fems-api/src/controllers/app/auth/auth.controller.js @@ -5,7 +5,6 @@ const authService = require("../../../services/auth.service"); const { body } = require("express-validator"); const validate = require("../../../middleware/validator.middleware"); const authMiddleware = require("../../../middleware/auth.middleware"); -const PermissionUtils = require("../../../utils/permission.utils"); router.post( "/login", @@ -35,16 +34,4 @@ router.post("/logout", authMiddleware, async (req, res, next) => { } }); -// src/controllers/app/auth/auth.controller.js -router.get("/menu", authMiddleware, async (req, res, next) => { - try { - const accessibleMenus = await PermissionUtils.getUserAccessibleMenus( - req.user - ); - res.json(accessibleMenus); - } catch (error) { - next(error); - } -}); - module.exports = router; diff --git a/fems-api/src/routes/index.js b/fems-api/src/routes/index.js index 99ff37e..6879f37 100644 --- a/fems-api/src/routes/index.js +++ b/fems-api/src/routes/index.js @@ -1,91 +1,14 @@ // src/routes/index.js -// const logger = require("../config/logger"); -// const adminRoutes = require("./admin"); -// const appRoutes = require("./app"); - -// function registerRoutes(app) { -// // 기본 경로에 라우터 연결 -// app.use("/api/v1/admin", adminRoutes); -// app.use("/api/v1/app", appRoutes); - -// // 등록된 라우트 출력 (디버깅용) -// const routes = []; -// app._router.stack.forEach((middleware) => { -// if (middleware.route) { -// routes.push( -// `${Object.keys(middleware.route.methods)} ${middleware.route.path}` -// ); -// } else if (middleware.name === "router") { -// middleware.handle.stack.forEach((handler) => { -// if (handler.route) { -// routes.push( -// `${Object.keys(handler.route.methods)} ${handler.route.path}` -// ); -// } -// }); -// } -// }); - -// logger.info("Registered routes:"); -// routes.forEach((route) => logger.info(route)); -// } - -// module.exports = registerRoutes; - -const express = require("express"); -const menuConfig = require("../config/menuConfig"); -const menuAccessMiddleware = require("../middleware/menu.middleware"); const logger = require("../config/logger"); +const adminRoutes = require("./admin"); +const appRoutes = require("./app"); function registerRoutes(app) { - // Admin 라우트 등록 - const adminRouter = express.Router(); - Object.entries(menuConfig.admin).forEach(([key, config]) => { - registerRouteWithPermissions(adminRouter, key, config); - }); - app.use("/api/v1/admin", adminRouter); + // 기본 경로에 라우터 연결 + app.use("/api/v1/admin", adminRoutes); + app.use("/api/v1/app", appRoutes); - // App 라우트 등록 - const appRouter = express.Router(); - Object.entries(menuConfig.app).forEach(([key, config]) => { - registerRouteWithPermissions(appRouter, key, config); - }); - app.use("/api/v1/app", appRouter); - - // 등록된 라우트 로깅 - logRegisteredRoutes(app); -} - -/** - * 권한이 적용된 라우트 등록 - */ -function registerRouteWithPermissions(router, key, config) { - const controller = require(`../controllers/${config.path.slice( - 1 - )}.controller`); - const path = `/${key}`; - - router.use(path, menuAccessMiddleware(config.path), controller); - - // 서브메뉴 등록 - if (config.subMenus) { - Object.entries(config.subMenus).forEach(([subKey, subConfig]) => { - const subController = require(`../controllers/${subConfig.path.slice( - 1 - )}.controller`); - router.use( - `${path}/${subKey}`, - menuAccessMiddleware(subConfig.path), - subController - ); - }); - } -} - -/** - * 등록된 라우트 로깅 - */ -function logRegisteredRoutes(app) { + // 등록된 라우트 출력 (디버깅용) const routes = []; app._router.stack.forEach((middleware) => { if (middleware.route) { diff --git a/fems-app/src/components/layout/SideNav.tsx b/fems-app/src/components/layout/SideNav.tsx index 78b7b63..8c025c1 100644 --- a/fems-app/src/components/layout/SideNav.tsx +++ b/fems-app/src/components/layout/SideNav.tsx @@ -122,9 +122,12 @@ const getMenuItems = ( // 관리자 권한 체크 const isAdmin = ["super_admin", "company_admin"].includes(role); - const hasAnyAdminPermission = Object.values(ADMIN_PERMISSIONS).some( - (permission) => hasPermission(permission) - ); + // 관리자가 아닌 경우에만 권한 체크 + const hasAnyAdminPermission = + !isAdmin && + Object.values(ADMIN_PERMISSIONS).some((permission) => + hasPermission(permission) + ); // 관리자 메뉴 아이템 const adminMenuItem = { @@ -175,13 +178,15 @@ const getMenuItems = ( ], }; - // 관리자 권한이 있는 메뉴 아이템만 필터링 + // 관리자면 모든 메뉴 표시, 아닌 경우 권한 체크 const filteredAdminItems = { ...adminMenuItem, - items: adminMenuItem.items.filter((item) => hasPermission(item.permission)), + items: isAdmin + ? adminMenuItem.items // 관리자는 모든 메뉴 표시 + : adminMenuItem.items.filter((item) => hasPermission(item.permission)), // 권한 체크 }; - // 관리자 권한이 있고, 접근 가능한 메뉴가 하나라도 있는 경우에만 관리자 메뉴 추가 + // 관리자이거나 권한이 있는 메뉴가 있는 경우에만 관리자 메뉴 추가 return isAdmin || (hasAnyAdminPermission && filteredAdminItems.items.length > 0) ? [...baseMenuItems, filteredAdminItems]