[UX] #577 align VPD menus with DDS
This commit is contained in:
@@ -95,15 +95,15 @@ UX-1부터 시작한다. 기존 데이터 모델과 VPD 로직은 바꾸지 않
|
|||||||
| 기존 표현 | 제품 표면 표현 | 비고 |
|
| 기존 표현 | 제품 표면 표현 | 비고 |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| VPD Backoffice | VPD 권한 운영 | 상단, 로그인, 브라우저 제목 |
|
| VPD Backoffice | VPD 권한 운영 | 상단, 로그인, 브라우저 제목 |
|
||||||
| 권한 관리 | 접근 정책 | 역할별 데이터 범위 설정 |
|
| 권한 관리 | 접근 규칙 | 역할별 데이터 범위 설정 |
|
||||||
| DB 보호 연결 / VPD 설정 | 보호 상태 | DB 객체 보호 정책의 확인·연결 |
|
| DB 보호 연결 / VPD 설정 | 보호 상태 | DB 객체 보호 정책의 확인·연결 |
|
||||||
| 권한 결과 확인 | 접근 검증 | 검증 세션으로 실제 조회 실행 |
|
| 권한 결과 확인 | 접근 검증 | 검증 세션으로 실제 조회 실행 |
|
||||||
| ORDS 조회 대상 | 조회 대상 | ORDS는 화면 상세에서만 표기 |
|
| ORDS 조회 대상 | 조회 대상 | ORDS는 화면 상세에서만 표기 |
|
||||||
| ORDS 핸들러 | 조회 연동 | 고급 운영 메뉴 |
|
| ORDS 핸들러 | 조회 연동 | 고급 운영 메뉴 |
|
||||||
| 지식 검색 관리 | 지식 검색 | 등록·정책·검색 기능 |
|
| 지식 검색 관리 | 지식자료 관리 | 등록·정책·검색 기능 |
|
||||||
| 별도 Filter 관리 | 고급 접근 조건 | 예외 정책 기능 |
|
| 별도 Filter 관리 | 고급 접근 조건 | 예외 정책 기능 |
|
||||||
| 운영 상태 / 연결 설정 | 운영 현황 / 시스템 설정 | 운영성·연동 설정 기능 |
|
| 운영 상태 / 연결 설정 | 운영 현황 / 시스템 설정 | 운영성·연동 설정 기능 |
|
||||||
|
|
||||||
상단 메뉴는 `권한 관리 · 데이터 보호 · 접근 검증 · 지식 검색 · 시스템 관리` 순서로 재구성한다. 절차나 구현 방식이 아니라 사용자가 하려는 일을 메뉴명으로 쓴다. 메뉴와 기본 화면에는 `1.`, `2.`, 단계 레일, `01/02` 배지를 두지 않는다. 순서가 실제 입력 제약인 wizard에서만 단계 번호를 사용한다.
|
상단 메뉴는 DDS와 같은 네 업무 영역인 `권한 관리 · 보호 정책 관리 · 지식자료 관리 · 접근 검증`으로 구성한다. ORDS·MCP·Filter·시스템 설정은 기본 제품 메뉴에서 빼고 관련 화면의 고급 링크에서만 연다. 절차나 구현 방식이 아니라 사용자가 하려는 일을 메뉴명으로 쓴다. 메뉴와 기본 화면에는 `1.`, `2.`, 단계 레일, `01/02` 배지를 두지 않는다. 순서가 실제 입력 제약인 wizard에서만 단계 번호를 사용한다.
|
||||||
|
|
||||||
기본 페이지는 제목과 현재 설정·주요 행동만 노출한다. VPD/ORDS 처리 원리, 배경 설명, 주의사항은 상단의 공통 `도움말` 버튼을 눌렀을 때만 펼친다. 이 규칙으로 제품 화면이 관리 매뉴얼처럼 보이는 문제를 줄이고, 설정 자체를 전면에 둔다.
|
기본 페이지는 제목과 현재 설정·주요 행동만 노출한다. VPD/ORDS 처리 원리, 배경 설명, 주의사항은 상단의 공통 `도움말` 버튼을 눌렀을 때만 펼친다. 이 규칙으로 제품 화면이 관리 매뉴얼처럼 보이는 문제를 줄이고, 설정 자체를 전면에 둔다.
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="dashboard-hero-actions" aria-label="주요 작업">
|
<div class="dashboard-hero-actions" aria-label="주요 작업">
|
||||||
<a class="btn rw-btn-primary" href="/probe">접근 검증</a>
|
<a class="btn rw-btn-primary" href="/probe">접근 검증</a>
|
||||||
<a class="btn rw-btn-secondary" href="/permissions">접근 정책</a>
|
<a class="btn rw-btn-secondary" href="/permissions">접근 규칙</a>
|
||||||
</div>
|
</div>
|
||||||
<details class="explanation-details dashboard-explanation">
|
<details class="explanation-details dashboard-explanation">
|
||||||
<summary>도움말</summary>
|
<summary>도움말</summary>
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
<h2>주요 작업</h2>
|
<h2>주요 작업</h2>
|
||||||
<div class="dashboard-action-grid">
|
<div class="dashboard-action-grid">
|
||||||
<a class="dashboard-action" href="/permissions">
|
<a class="dashboard-action" href="/permissions">
|
||||||
<span><strong>접근 정책</strong><small>역할별 객체·행·컬럼 접근을 설정합니다.</small></span>
|
<span><strong>접근 규칙</strong><small>역할별 객체·행·컬럼 접근을 설정합니다.</small></span>
|
||||||
<span class="dashboard-action-arrow" aria-hidden="true">→</span>
|
<span class="dashboard-action-arrow" aria-hidden="true">→</span>
|
||||||
</a>
|
</a>
|
||||||
<a class="dashboard-action dashboard-action-emphasis" href="/probe">
|
<a class="dashboard-action dashboard-action-emphasis" href="/probe">
|
||||||
|
|||||||
@@ -18,18 +18,26 @@
|
|||||||
<div class="rw-menu-group">
|
<div class="rw-menu-group">
|
||||||
<button class="rw-menu-trigger" type="button" aria-expanded="false">권한 관리</button>
|
<button class="rw-menu-trigger" type="button" aria-expanded="false">권한 관리</button>
|
||||||
<div class="rw-menu-panel">
|
<div class="rw-menu-panel">
|
||||||
<a class="nav-link" href="/users">사용자</a>
|
<a class="nav-link" href="/users">사용자 관리</a>
|
||||||
<a class="nav-link" href="/groups">그룹</a>
|
<a class="nav-link" href="/groups">그룹 관리</a>
|
||||||
<a class="nav-link" href="/roles">역할</a>
|
<a class="nav-link" href="/roles">역할 관리</a>
|
||||||
<a class="nav-link" href="/permissions">접근 정책</a>
|
<a class="nav-link" href="/permissions">접근 규칙</a>
|
||||||
<a class="nav-link" href="/effective-matrix">사용자별 접근 확인</a>
|
<a class="nav-link" href="/effective-matrix">권한 현황</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="rw-menu-group">
|
<div class="rw-menu-group">
|
||||||
<button class="rw-menu-trigger" type="button" aria-expanded="false">데이터 보호</button>
|
<button class="rw-menu-trigger" type="button" aria-expanded="false">보호 정책 관리</button>
|
||||||
<div class="rw-menu-panel">
|
<div class="rw-menu-panel">
|
||||||
<a class="nav-link" href="/vpd-policies">보호 상태</a>
|
<a class="nav-link" href="/vpd-policies">보호 상태</a>
|
||||||
<a class="nav-link" href="/objects">조회 대상</a>
|
<a class="nav-link" href="/objects">보호 대상 관리</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="rw-menu-group">
|
||||||
|
<button class="rw-menu-trigger" type="button" aria-expanded="false">지식자료 관리</button>
|
||||||
|
<div class="rw-menu-panel">
|
||||||
|
<a class="nav-link" href="/vector-knowledge">지식자료 등록 및 검색</a>
|
||||||
|
<a class="nav-link" href="/mcp-chatbot">대화형 검색</a>
|
||||||
|
<a class="nav-link" href="/mcp-reasoning">검색 해석</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="rw-menu-group">
|
<div class="rw-menu-group">
|
||||||
@@ -37,25 +45,7 @@
|
|||||||
<div class="rw-menu-panel">
|
<div class="rw-menu-panel">
|
||||||
<a class="nav-link" href="/tokens">검증 세션</a>
|
<a class="nav-link" href="/tokens">검증 세션</a>
|
||||||
<a class="nav-link" href="/probe">접근 검증</a>
|
<a class="nav-link" href="/probe">접근 검증</a>
|
||||||
</div>
|
<a class="nav-link" href="/operation-status">검증 현황</a>
|
||||||
</div>
|
|
||||||
<div class="rw-menu-group">
|
|
||||||
<button class="rw-menu-trigger" type="button" aria-expanded="false">지식 검색</button>
|
|
||||||
<div class="rw-menu-panel">
|
|
||||||
<a class="nav-link" href="/vector-knowledge">지식 검색</a>
|
|
||||||
<a class="nav-link" href="/mcp-chatbot">대화형 검색</a>
|
|
||||||
<a class="nav-link" href="/mcp-reasoning">검색 해석</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="rw-menu-group">
|
|
||||||
<button class="rw-menu-trigger" type="button" aria-expanded="false">시스템 관리</button>
|
|
||||||
<div class="rw-menu-panel">
|
|
||||||
<a class="nav-link" href="/ords-handlers">조회 연동</a>
|
|
||||||
<a class="nav-link" href="/mcp-sse">MCP 연동</a>
|
|
||||||
<a class="nav-link" href="/mcp-client-demo">연동 점검</a>
|
|
||||||
<a class="nav-link" href="/operation-status">운영 현황</a>
|
|
||||||
<a class="nav-link" href="/vpd-filter-policies">고급 접근 조건</a>
|
|
||||||
<a class="nav-link" href="/settings">시스템 설정</a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
|
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
|
||||||
<head th:replace="~{fragments/layout :: head('접근 정책')}"></head>
|
<head th:replace="~{fragments/layout :: head('접근 규칙')}"></head>
|
||||||
<body>
|
<body>
|
||||||
<nav th:replace="~{fragments/layout :: nav}"></nav>
|
<nav th:replace="~{fragments/layout :: nav}"></nav>
|
||||||
<main class="container py-4">
|
<main class="container py-4">
|
||||||
<div class="page-title">
|
<div class="page-title">
|
||||||
<h1>접근 정책</h1>
|
<h1>접근 규칙</h1>
|
||||||
<details class="explanation-details">
|
<details class="explanation-details">
|
||||||
<summary>도움말</summary>
|
<summary>도움말</summary>
|
||||||
<p>VPD policy function이 참조할 사용자, 역할, 행 규칙, 컬럼 원문 허용 규칙을 저장합니다. 이 화면에서 만든 규칙이 기본 Filter의 동적 입력이 됩니다.</p>
|
<p>VPD policy function이 참조할 사용자, 역할, 행 규칙, 컬럼 원문 허용 규칙을 저장합니다. 이 화면에서 만든 규칙이 기본 Filter의 동적 입력이 됩니다.</p>
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
<section class="content-band">
|
<section class="content-band">
|
||||||
<div class="section-heading">
|
<div class="section-heading">
|
||||||
<div>
|
<div>
|
||||||
<h2>새 접근 정책</h2>
|
<h2>새 접근 규칙</h2>
|
||||||
<p class="section-description">저장 전 적용 대상과 행 범위를 검토한 뒤 VPD 권한을 반영합니다.</p>
|
<p class="section-description">저장 전 적용 대상과 행 범위를 검토한 뒤 VPD 권한을 반영합니다.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="wizard-progress" aria-label="권한 추가 단계">
|
<div class="wizard-progress" aria-label="권한 추가 단계">
|
||||||
@@ -243,7 +243,7 @@
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="content-band">
|
<section class="content-band">
|
||||||
<h2>접근 정책 목록</h2>
|
<h2>접근 규칙 목록</h2>
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table table-sm align-middle">
|
<table class="table table-sm align-middle">
|
||||||
<thead>
|
<thead>
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class GuidedFlowTemplateTest {
|
|||||||
.contains("th:replace=\"~{fragments/layout :: head('VPD 권한 운영')}\"")
|
.contains("th:replace=\"~{fragments/layout :: head('VPD 권한 운영')}\"")
|
||||||
.contains("권한 관리")
|
.contains("권한 관리")
|
||||||
.contains("접근 검증")
|
.contains("접근 검증")
|
||||||
.contains("접근 정책")
|
.contains("접근 규칙")
|
||||||
.contains("현재 상태")
|
.contains("현재 상태")
|
||||||
.contains("상세 현황")
|
.contains("상세 현황")
|
||||||
.contains("<details class=\"dashboard-details\">")
|
.contains("<details class=\"dashboard-details\">")
|
||||||
@@ -28,10 +28,9 @@ class GuidedFlowTemplateTest {
|
|||||||
.doesNotContain(">01<", ">02<");
|
.doesNotContain(">01<", ">02<");
|
||||||
assertThat(layout)
|
assertThat(layout)
|
||||||
.contains("VPD 권한 운영")
|
.contains("VPD 권한 운영")
|
||||||
.contains("데이터 보호")
|
.contains("보호 정책 관리")
|
||||||
.contains("접근 검증")
|
.contains("접근 검증")
|
||||||
.contains("지식 검색")
|
.contains("지식자료 관리")
|
||||||
.contains("시스템 관리")
|
|
||||||
.doesNotContain("VPD Backoffice");
|
.doesNotContain("VPD Backoffice");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user