From 09577c32574b885600b0a9389ac8291994176c59 Mon Sep 17 00:00:00 2001 From: chan Date: Fri, 12 Jun 2026 17:51:09 +0900 Subject: [PATCH] =?UTF-8?q?adminfront:=20=EB=B9=84-=EC=8A=88=ED=8D=BC?= =?UTF-8?q?=EC=96=B4=EB=93=9C=EB=AF=BC=20=EC=84=B8=EB=B6=80=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B6=8C=ED=95=9C(tenants=20/=20manage=5Ftenants)?= =?UTF-8?q?=20=EC=9E=90=EB=8F=99=ED=99=94=20=EA=B2=80=EC=A6=9D=EC=9D=84=20?= =?UTF-8?q?=EC=9C=84=ED=95=9C=20Playwright=20E2E=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BC=80=EC=9D=B4=EC=8A=A4=20=EB=B3=B4=EA=B0=95=20?= =?UTF-8?q?=EB=B0=8F=20=ED=86=B5=EA=B3=BC=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- adminfront/tests/security_roles.spec.ts | 56 ++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/adminfront/tests/security_roles.spec.ts b/adminfront/tests/security_roles.spec.ts index 3e1cda3a..a9f6ff4a 100644 --- a/adminfront/tests/security_roles.spec.ts +++ b/adminfront/tests/security_roles.spec.ts @@ -198,7 +198,11 @@ test.describe("보안 및 접근 제어: 시스템 관리자 vs 일반 사용자 test.describe("일반 사용자 (Tenant Member) 제한", () => { test.beforeEach(async ({ page }) => { - await setupAuth(page, "user"); + await setupAuth(page, "user", { + systemPermissions: { + audit_logs: true, + }, + }); await page.goto("/"); await expect(page.locator("aside")).toBeVisible({ timeout: 10000 }); }); @@ -291,4 +295,54 @@ test.describe("보안 및 접근 제어: 시스템 관리자 vs 일반 사용자 ).not.toBeVisible(); }); }); + + test.describe("세부 기능 권한(System Permissions)을 가진 비-슈퍼어드민", () => { + test("테넌트 조회 권한(tenants)이 있을 때 테넌트 목록 페이지 진입 가능 및 쓰기 기능 제한 확인", async ({ page }) => { + await setupAuth(page, "tenant_admin", { + tenantId: "t1", + tenantSlug: "t1", + systemPermissions: { + tenants: true, + manage_tenants: false, + }, + }); + await page.goto("/"); + await expect(page.locator("aside")).toBeVisible({ timeout: 10000 }); + + // 테넌트 목록 메뉴 노출 및 클릭 진입 확인 + await expect(page.locator('a[href="/tenants"]')).toBeVisible(); + await page.goto("/tenants"); + + // 차단 메시지 비노출 확인 + await expect( + page.getByText(/접근 권한이 없습니다|이 작업을 수행할 권한이 없습니다/i), + ).not.toBeVisible(); + + // "테넌트 1" 목록 노출 확인 + await expect(page.getByText("테넌트 1")).toBeVisible(); + + // 수정 권한(manage_tenants)이 없으므로 쓰기 버튼 비노출 확인 + await expect(page.getByRole("link", { name: /테넌트 추가/i })).not.toBeVisible(); + await expect(page.getByTestId("tenant-data-mgmt-btn")).not.toBeVisible(); + }); + + test("테넌트 관리 권한(manage_tenants)까지 있을 때 테넌트 추가 및 데이터 관리 버튼 활성화 확인", async ({ page }) => { + await setupAuth(page, "tenant_admin", { + tenantId: "t1", + tenantSlug: "t1", + systemPermissions: { + tenants: true, + manage_tenants: true, + }, + }); + await page.goto("/tenants"); + + // "테넌트 1" 목록 노출 확인 + await expect(page.getByText("테넌트 1")).toBeVisible(); + + // 수정 권한(manage_tenants)이 있으므로 쓰기 버튼(테넌트 추가, 데이터 관리) 노출 확인 + await expect(page.getByRole("link", { name: /테넌트 추가/i })).toBeVisible(); + await expect(page.getByTestId("tenant-data-mgmt-btn")).toBeVisible(); + }); + }); });