대시보드 조회 시 company_code 기반 접근 권한으로 변경

This commit is contained in:
dohyeons 2025-12-01 10:14:41 +09:00
parent b43bf57ea9
commit 1849bf6654
1 changed files with 32 additions and 31 deletions

View File

@ -299,6 +299,8 @@ export class DashboardService {
/** /**
* *
* - company_code가
* - company_code가 '*'
*/ */
static async getDashboardById( static async getDashboardById(
dashboardId: string, dashboardId: string,
@ -310,44 +312,43 @@ export class DashboardService {
let dashboardQuery: string; let dashboardQuery: string;
let dashboardParams: any[]; let dashboardParams: any[];
if (userId) { if (companyCode) {
if (companyCode) { // 회사 코드가 있으면 해당 회사 대시보드 또는 공개 대시보드 조회 가능
// 최고 관리자(companyCode = '*')는 모든 대시보드 조회 가능
if (companyCode === '*') {
dashboardQuery = ` dashboardQuery = `
SELECT d.* SELECT d.*
FROM dashboards d FROM dashboards d
WHERE d.id = $1 AND d.deleted_at IS NULL WHERE d.id = $1 AND d.deleted_at IS NULL
AND d.company_code = $2
AND (d.created_by = $3 OR d.is_public = true)
`;
dashboardParams = [dashboardId, companyCode, userId];
} else {
dashboardQuery = `
SELECT d.*
FROM dashboards d
WHERE d.id = $1 AND d.deleted_at IS NULL
AND (d.created_by = $2 OR d.is_public = true)
`;
dashboardParams = [dashboardId, userId];
}
} else {
if (companyCode) {
dashboardQuery = `
SELECT d.*
FROM dashboards d
WHERE d.id = $1 AND d.deleted_at IS NULL
AND d.company_code = $2
AND d.is_public = true
`;
dashboardParams = [dashboardId, companyCode];
} else {
dashboardQuery = `
SELECT d.*
FROM dashboards d
WHERE d.id = $1 AND d.deleted_at IS NULL
AND d.is_public = true
`; `;
dashboardParams = [dashboardId]; dashboardParams = [dashboardId];
} else {
dashboardQuery = `
SELECT d.*
FROM dashboards d
WHERE d.id = $1 AND d.deleted_at IS NULL
AND d.company_code = $2
`;
dashboardParams = [dashboardId, companyCode];
} }
} else if (userId) {
// 회사 코드 없이 userId만 있는 경우 (본인 생성 또는 공개)
dashboardQuery = `
SELECT d.*
FROM dashboards d
WHERE d.id = $1 AND d.deleted_at IS NULL
AND (d.created_by = $2 OR d.is_public = true)
`;
dashboardParams = [dashboardId, userId];
} else {
// 비로그인 사용자는 공개 대시보드만
dashboardQuery = `
SELECT d.*
FROM dashboards d
WHERE d.id = $1 AND d.deleted_at IS NULL
AND d.is_public = true
`;
dashboardParams = [dashboardId];
} }
const dashboardResult = await PostgreSQLService.query( const dashboardResult = await PostgreSQLService.query(