회사별 테이블 데이터 격리

This commit is contained in:
kjs
2025-11-06 18:35:05 +09:00
parent 0e4cf7b641
commit fb201cc799
6 changed files with 918 additions and 5 deletions

View File

@@ -27,6 +27,7 @@ export class EntityJoinController {
enableEntityJoin = true,
additionalJoinColumns, // 추가 조인 컬럼 정보 (JSON 문자열)
screenEntityConfigs, // 화면별 엔티티 설정 (JSON 문자열)
autoFilter, // 🔒 멀티테넌시 자동 필터
userLang, // userLang은 별도로 분리하여 search에 포함되지 않도록 함
...otherParams
} = req.query;
@@ -36,6 +37,7 @@ export class EntityJoinController {
size,
enableEntityJoin,
search,
autoFilter,
});
// 검색 조건 처리
@@ -51,6 +53,31 @@ export class EntityJoinController {
}
}
// 🔒 멀티테넌시: 자동 필터 처리
if (autoFilter) {
try {
const parsedAutoFilter =
typeof autoFilter === "string" ? JSON.parse(autoFilter) : autoFilter;
if (parsedAutoFilter.enabled && (req as any).user) {
const filterColumn = parsedAutoFilter.filterColumn || "company_code";
const userField = parsedAutoFilter.userField || "companyCode";
const userValue = ((req as any).user as any)[userField];
if (userValue) {
searchConditions[filterColumn] = userValue;
logger.info("🔒 Entity 조인에 멀티테넌시 필터 적용:", {
filterColumn,
userValue,
tableName,
});
}
}
} catch (error) {
logger.warn("자동 필터 파싱 오류:", error);
}
}
// 추가 조인 컬럼 정보 처리
let parsedAdditionalJoinColumns: any[] = [];
if (additionalJoinColumns) {