| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import BoardMeta from '@/types/forum/boardMeta';
- import BoardManager from '@/types/forum/boardManager';
- import { MemberResponse } from '@/types/response/account/member';
- import { BoardLayout } from '@/constants/forum';
- // 최고관리자 또는 게시판 관리자 여부 확인
- export function isBoardAdmin(
- boardManagers: BoardManager[],
- member: MemberResponse|null
- ): boolean {
- if (!member) {
- return false;
- }
- if (member.isAdmin) {
- return true;
- }
- return boardManagers ? boardManagers.some(m => m.user.email === member.email) : false;
- }
- type PermissionResult = {
- canAccessBoard: boolean;
- canViewPost: boolean;
- canWritePost: boolean;
- canViewComment: boolean;
- canWriteComment: boolean;
- canWriteReply: boolean;
- canUploadFile: boolean;
- canDownloadFile: boolean;
- };
- export function checkPermission(
- boardMeta: BoardMeta,
- boardManagers: BoardManager[],
- member: MemberResponse|null
- ): PermissionResult {
- const isQnABoard = boardMeta.list.layout === BoardLayout.QnA;
- const check = (permission: number, qnaRestricted = false): boolean =>
- {
- // 비회원은 항상 허용
- if (permission <= -1) {
- return true;
- }
- // 비로그인은 거부
- if (!member) {
- return false;
- }
- // 최고관리자는 항상 허용
- if (member.isAdmin) {
- return true;
- }
- // 게시판 관리자 여부
- const isBoardManager = boardManagers?.some(m => m.user.email === member.email) ?? false;
- // 1:1 게시판: 최고관리자/게시판 관리자만 허용 (일반 회원 거부)
- if (qnaRestricted && isQnABoard) {
- return isBoardManager;
- }
- // 유효 권한 레벨 계산 (매니저=99, 일반=memberGrade.order)
- const level = isBoardManager ? 99 : (member.memberGrade?.order ?? 0);
- return permission <= level;
- };
- return {
- canAccessBoard: check(boardMeta.permission.boardAccess),
- canViewPost: check(boardMeta.permission.postView),
- canWritePost: check(boardMeta.permission.postWrite),
- canViewComment: check(boardMeta.permission.commentView),
- canWriteComment: check(boardMeta.permission.commentWrite, true),
- canWriteReply: check(boardMeta.permission.replyWrite, true),
- canUploadFile: check(boardMeta.permission.fileUpload),
- canDownloadFile: check(boardMeta.permission.fileDownload)
- };
- }
|