forked from baron/baron-sso
테넌트 CSV 조직 설정 동기화 보완
This commit is contained in:
18
adminfront/hanmac_org.csv
Normal file
18
adminfront/hanmac_org.csv
Normal file
@@ -0,0 +1,18 @@
|
||||
"조직명","멤버 수","조직장","조직 다국어명","설명","메일링 리스트","마스터에게 메시지방 기능 권한 부여","조직 관련 알림 보내기","조직 공개","외부 도메인 메일 수신 차단","보내는 주소로 사용 가능한 구성원","메일을 보낼 수 있는 구성원","상위 조직"
|
||||
"네이버웍스관리용","2","슈퍼관리자(su-@samaneng.com)","","","su2@hanmaceng.co.kr","N","N","N","Y","","",""
|
||||
"영업지원","0","","","","t_686ee@hanmaceng.co.kr","Y","N","Y","Y","","",""
|
||||
"안전관리부","0","","","","t_993iv@hanmaceng.co.kr","Y","N","Y","Y","","",""
|
||||
"인프라사업본부","0","","","","t_211qf@hanmaceng.co.kr","Y","N","Y","Y","","",""
|
||||
"도로부","0","","","","t_471lj@hanmaceng.co.kr","Y","N","Y","Y","","","인프라사업본부(t_211qf@hanmaceng.co.kr)"
|
||||
"교통부","0","","","","t_571hb@hanmaceng.co.kr","Y","N","Y","Y","","","인프라사업본부(t_211qf@hanmaceng.co.kr)"
|
||||
"구조부","0","","","","t_758pk@hanmaceng.co.kr","Y","N","Y","Y","","","인프라사업본부(t_211qf@hanmaceng.co.kr)"
|
||||
"지반터널부","0","","","","t_113ok@hanmaceng.co.kr","Y","N","Y","Y","","","인프라사업본부(t_211qf@hanmaceng.co.kr)"
|
||||
"국토환경사업본부","0","","","","t_892ed@hanmaceng.co.kr","Y","N","Y","Y","","",""
|
||||
"환경평가부","0","","","","t_021ay@hanmaceng.co.kr","Y","N","Y","Y","","","국토환경사업본부(t_892ed@hanmaceng.co.kr)"
|
||||
"도시계획부","0","","","","t_501xv@hanmaceng.co.kr","Y","N","Y","Y","","","국토환경사업본부(t_892ed@hanmaceng.co.kr)"
|
||||
"수자원부","0","","","","t_420zr@hanmaceng.co.kr","Y","N","Y","Y","","","국토환경사업본부(t_892ed@hanmaceng.co.kr)"
|
||||
"상하수도부","0","","","","t_979ca@hanmaceng.co.kr","Y","N","Y","Y","","","국토환경사업본부(t_892ed@hanmaceng.co.kr)"
|
||||
"건설사업관리본부","0","","","","t_504fh@hanmaceng.co.kr","Y","N","Y","Y","","",""
|
||||
"건설사업부","0","","","","t_756my@hanmaceng.co.kr","Y","N","Y","Y","","","건설사업관리본부(t_504fh@hanmaceng.co.kr)"
|
||||
"안전진단부","0","","","","t_470ta@hanmaceng.co.kr","Y","N","Y","Y","","",""
|
||||
"경영지원부","0","","","","t_804xh@hanmaceng.co.kr","Y","N","Y","Y","","",""
|
||||
|
18
adminfront/hanmac_org_slugged.csv
Normal file
18
adminfront/hanmac_org_slugged.csv
Normal file
@@ -0,0 +1,18 @@
|
||||
"조직명","멤버 수","조직장","조직 다국어명","설명","메일링 리스트","마스터에게 메시지방 기능 권한 부여","조직 관련 알림 보내기","조직 공개","외부 도메인 메일 수신 차단","보내는 주소로 사용 가능한 구성원","메일을 보낼 수 있는 구성원","상위 조직"
|
||||
"네이버웍스관리용","2","슈퍼관리자(su-@samaneng.com)","","","nw-admin-hanmac@hanmaceng.co.kr","N","N","N","Y","","",""
|
||||
"영업지원","0","","","","sales-support@hanmaceng.co.kr","Y","N","Y","Y","","",""
|
||||
"안전관리부","0","","","","safety-management@hanmaceng.co.kr","Y","N","Y","Y","","",""
|
||||
"인프라사업본부","0","","","","infrastructure-hq@hanmaceng.co.kr","Y","N","Y","Y","","",""
|
||||
"도로부","0","","","","infra-road@hanmaceng.co.kr","Y","N","Y","Y","","","인프라사업본부(infrastructure-hq@hanmaceng.co.kr)"
|
||||
"교통부","0","","","","traffic@hanmaceng.co.kr","Y","N","Y","Y","","","인프라사업본부(infrastructure-hq@hanmaceng.co.kr)"
|
||||
"구조부","0","","","","infra-structures@hanmaceng.co.kr","Y","N","Y","Y","","","인프라사업본부(infrastructure-hq@hanmaceng.co.kr)"
|
||||
"지반터널부","0","","","","infra-geotech-tunnel@hanmaceng.co.kr","Y","N","Y","Y","","","인프라사업본부(infrastructure-hq@hanmaceng.co.kr)"
|
||||
"국토환경사업본부","0","","","","land-environment-hq@hanmaceng.co.kr","Y","N","Y","Y","","",""
|
||||
"환경평가부","0","","","","land-env-assessment@hanmaceng.co.kr","Y","N","Y","Y","","","국토환경사업본부(land-environment-hq@hanmaceng.co.kr)"
|
||||
"도시계획부","0","","","","land-env-urban-planning@hanmaceng.co.kr","Y","N","Y","Y","","","국토환경사업본부(land-environment-hq@hanmaceng.co.kr)"
|
||||
"수자원부","0","","","","land-env-water-resources@hanmaceng.co.kr","Y","N","Y","Y","","","국토환경사업본부(land-environment-hq@hanmaceng.co.kr)"
|
||||
"상하수도부","0","","","","water-sewerage@hanmaceng.co.kr","Y","N","Y","Y","","","국토환경사업본부(land-environment-hq@hanmaceng.co.kr)"
|
||||
"건설사업관리본부","0","","","","construction-management-hq@hanmaceng.co.kr","Y","N","Y","Y","","",""
|
||||
"건설사업부","0","","","","construction-business@hanmaceng.co.kr","Y","N","Y","Y","","","건설사업관리본부(construction-management-hq@hanmaceng.co.kr)"
|
||||
"안전진단부","0","","","","safety-diagnosis@hanmaceng.co.kr","Y","N","Y","Y","","",""
|
||||
"경영지원부","0","","","","management-support@hanmaceng.co.kr","Y","N","Y","Y","","",""
|
||||
|
@@ -80,7 +80,7 @@ import {
|
||||
} from "../utils/tenantCsvImport";
|
||||
|
||||
const tenantCSVTemplate =
|
||||
"name,type,parent_tenant_slug,slug,memo,email_domain\n";
|
||||
"name,type,parent_tenant_slug,slug,memo,email_domain,visibility,org_unit_type\n";
|
||||
|
||||
type SortConfig = {
|
||||
key: keyof TenantSummary | "recursiveMemberCount";
|
||||
|
||||
@@ -66,7 +66,7 @@ describe("tenantCsvImport", () => {
|
||||
|
||||
it("parses tenant CSV rows with the supported import columns", () => {
|
||||
const rows = parseTenantCSV(
|
||||
"tenant_id,name,type,parent_tenant_id,slug,memo,email_domain\n,Hanmac Tech,COMPANY,,hanmac-tech,Memo,hanmac-tech.example.com\n",
|
||||
"tenant_id,name,type,parent_tenant_id,slug,memo,email_domain,visibility,org_unit_type\n,Hanmac Tech,COMPANY,,hanmac-tech,Memo,hanmac-tech.example.com,internal,센터\n",
|
||||
);
|
||||
|
||||
expect(rows).toEqual([
|
||||
@@ -80,6 +80,8 @@ describe("tenantCsvImport", () => {
|
||||
slug: "hanmac-tech",
|
||||
memo: "Memo",
|
||||
emailDomain: "hanmac-tech.example.com",
|
||||
visibility: "internal",
|
||||
orgUnitType: "센터",
|
||||
},
|
||||
]);
|
||||
});
|
||||
@@ -109,15 +111,18 @@ describe("tenantCsvImport", () => {
|
||||
|
||||
it("serializes selected matches by filling tenant_id before upload", () => {
|
||||
const rows = parseTenantCSV(
|
||||
"tenant_id,name,type,parent_tenant_id,slug,memo,email_domain\n,Hanmac Tech,COMPANY,,hanmac-tech,Memo,hanmac-tech.example.com\n",
|
||||
"tenant_id,name,type,parent_tenant_id,slug,memo,email_domain,visibility,org_unit_type\n,Hanmac Tech,COMPANY,,hanmac-tech,Memo,hanmac-tech.example.com,private,팀\n",
|
||||
);
|
||||
const preview = buildTenantImportPreview(rows, tenants);
|
||||
const csv = serializeTenantImportCSV(preview, {
|
||||
2: "tenant-1",
|
||||
});
|
||||
|
||||
expect(csv.split("\n")[0]).toBe(
|
||||
"tenant_id,name,type,parent_tenant_id,parent_tenant_slug,slug,memo,email_domain,visibility,org_unit_type",
|
||||
);
|
||||
expect(csv).toContain(
|
||||
"tenant-1,Hanmac Tech,COMPANY,,,hanmac-tech,Memo,hanmac-tech.example.com",
|
||||
"tenant-1,Hanmac Tech,COMPANY,,,hanmac-tech,Memo,hanmac-tech.example.com,private,팀",
|
||||
);
|
||||
});
|
||||
|
||||
@@ -228,7 +233,7 @@ describe("tenantCsvImport", () => {
|
||||
});
|
||||
|
||||
expect(csv.split("\n")[0]).toBe(
|
||||
"tenant_id,name,type,parent_tenant_id,parent_tenant_slug,slug,memo,email_domain",
|
||||
"tenant_id,name,type,parent_tenant_id,parent_tenant_slug,slug,memo,email_domain,visibility,org_unit_type",
|
||||
);
|
||||
expect(csv).toContain(
|
||||
"staging-child-id,Child Tenant,ORGANIZATION,staging-parent-id,parent-slug,child-slug,,",
|
||||
|
||||
@@ -10,6 +10,8 @@ export type TenantCSVRow = {
|
||||
slug: string;
|
||||
memo: string;
|
||||
emailDomain: string;
|
||||
visibility: string;
|
||||
orgUnitType: string;
|
||||
};
|
||||
|
||||
export type TenantCSVParseOptions = {
|
||||
@@ -76,6 +78,8 @@ const importHeaders = [
|
||||
"slug",
|
||||
"memo",
|
||||
"email_domain",
|
||||
"visibility",
|
||||
"org_unit_type",
|
||||
];
|
||||
|
||||
const headerAliases: Record<string, TenantCSVSourceKey> = {
|
||||
@@ -102,6 +106,16 @@ const headerAliases: Record<string, TenantCSVSourceKey> = {
|
||||
email_domain: "emailDomain",
|
||||
domain: "emailDomain",
|
||||
domains: "emailDomain",
|
||||
visibility: "visibility",
|
||||
public_setting: "visibility",
|
||||
publicsetting: "visibility",
|
||||
orgunittype: "orgUnitType",
|
||||
org_unit_type: "orgUnitType",
|
||||
"org-unit-type": "orgUnitType",
|
||||
organizationtype: "orgUnitType",
|
||||
organization_type: "orgUnitType",
|
||||
orgtype: "orgUnitType",
|
||||
org_type: "orgUnitType",
|
||||
};
|
||||
|
||||
export function parseTenantCSV(
|
||||
@@ -159,6 +173,8 @@ export function parseTenantCSV(
|
||||
slug,
|
||||
memo: value("memo"),
|
||||
emailDomain: value("emailDomain"),
|
||||
visibility: value("visibility"),
|
||||
orgUnitType: value("orgUnitType"),
|
||||
};
|
||||
});
|
||||
}
|
||||
@@ -287,6 +303,8 @@ export function serializeTenantImportCSV(
|
||||
slug,
|
||||
preview.row.memo,
|
||||
preview.row.emailDomain,
|
||||
preview.row.visibility,
|
||||
preview.row.orgUnitType,
|
||||
]);
|
||||
}
|
||||
return `${lines.map(formatCSVRecord).join("\n")}\n`;
|
||||
|
||||
Reference in New Issue
Block a user