diff --git a/apps/common/features/src/entities/menu-authority/index.ts b/apps/common/features/src/entities/menu-authority/index.ts index baf6e6085..da36accae 100644 --- a/apps/common/features/src/entities/menu-authority/index.ts +++ b/apps/common/features/src/entities/menu-authority/index.ts @@ -1,3 +1,4 @@ export { MenuAuthorityApi } from "./api/menu-authority-service"; export { type PageMenuAuthority } from "./model/menu-authority-interface"; +export { AuthorityButton } from "./ui/authority-button"; export { ManagementAuthorityDialog } from "./ui/management-authority-dialog"; diff --git a/apps/common/features/src/entities/menu-authority/ui/authority-button.tsx b/apps/common/features/src/entities/menu-authority/ui/authority-button.tsx new file mode 100644 index 000000000..257ab6e5d --- /dev/null +++ b/apps/common/features/src/entities/menu-authority/ui/authority-button.tsx @@ -0,0 +1,26 @@ +import { useMenuStore } from "@/shared/lib"; +import { Button, cn, type ButtonProps } from "@common/components"; +import type { PageMenuAuthority } from "../model/menu-authority-interface"; + +type AuthorityButtonProps = { + authority: keyof PageMenuAuthority; +} & ButtonProps; + +function AuthorityButton({ + authority, + className, + children, + ...props +}: AuthorityButtonProps) { + const pageMenuAuthority = useMenuStore((state) => state.pageMenuAuthority); + + const isAuthority = pageMenuAuthority?.[authority] === "Y"; + + return ( + + ); +} + +export { AuthorityButton }; diff --git a/apps/common/features/src/widgets/post/ui/post-action.tsx b/apps/common/features/src/widgets/post/ui/post-action.tsx index 4eaa960cb..b063f7636 100644 --- a/apps/common/features/src/widgets/post/ui/post-action.tsx +++ b/apps/common/features/src/widgets/post/ui/post-action.tsx @@ -2,21 +2,24 @@ import { useRouter, usePathname } from "next/navigation"; import { useConfirm } from "@frontend-opensource/use-react-hooks"; import { Button } from "@common/components"; import { useMenuStore, useUserStore } from "@/shared/lib"; +import { AuthorityButton } from "@/entities/menu-authority"; type PostActionProps = { - bbsId: string; - pstNo: string; + registerId?: string; children: React.ReactNode; handleDelete: () => Promise; }; -function PostAction({ children, handleDelete }: PostActionProps) { +function PostAction({ registerId, children, handleDelete }: PostActionProps) { const router = useRouter(); const pathname = usePathname(); const { confirm } = useConfirm(); const bbsInfo = useMenuStore((state) => state.bbsInfo); const userInfo = useUserStore((state) => state.userInfo); + const actionButtonAuthrt = + userInfo?.adminRoleYn === "Y" || userInfo?.userUnqId === registerId; + const onDelete = async () => { if (await confirm("삭제하시겠습니까?")) handleDelete(); }; @@ -46,15 +49,19 @@ function PostAction({ children, handleDelete }: PostActionProps) { > 목록 - + {actionButtonAuthrt && ( + router.push(`${pathname}/modify`)} + > + 수정 + + )} {bbsInfo?.ansUseYn === "Y" && ( - + + )} + {actionButtonAuthrt && ( + + 삭제 + )} - ); diff --git a/apps/common/features/src/widgets/post/ui/post.tsx b/apps/common/features/src/widgets/post/ui/post.tsx index bd8db7c21..8033938cf 100644 --- a/apps/common/features/src/widgets/post/ui/post.tsx +++ b/apps/common/features/src/widgets/post/ui/post.tsx @@ -125,7 +125,7 @@ function Post({ bbsId, pstNo }: { bbsId: string; pstNo: string }) { return ( <> - +

{postData?.pstTtl}