feat #477: show vpd ords control architecture
This commit is contained in:
@@ -184,6 +184,14 @@ body {
|
||||
.rw-menu-group:focus-within .rw-menu-panel {
|
||||
display: grid;
|
||||
}
|
||||
|
||||
.architecture-strip {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.architecture-arrow {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.page-title {
|
||||
@@ -201,6 +209,52 @@ body {
|
||||
margin: .35rem 0 0;
|
||||
}
|
||||
|
||||
.architecture-strip {
|
||||
align-items: stretch;
|
||||
display: grid;
|
||||
gap: .5rem;
|
||||
grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr) auto minmax(0, 1fr);
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.architecture-step {
|
||||
background: var(--rw-surface);
|
||||
border: 1px solid var(--rw-border);
|
||||
border-radius: 8px;
|
||||
padding: .85rem;
|
||||
}
|
||||
|
||||
.architecture-step.active {
|
||||
border-color: var(--rw-primary);
|
||||
box-shadow: inset 0 0 0 1px var(--rw-primary);
|
||||
}
|
||||
|
||||
.architecture-kicker {
|
||||
color: var(--rw-muted);
|
||||
display: block;
|
||||
font-size: .72rem;
|
||||
font-weight: 800;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.architecture-step strong {
|
||||
display: block;
|
||||
font-size: .95rem;
|
||||
margin-top: .15rem;
|
||||
}
|
||||
|
||||
.architecture-step p {
|
||||
color: var(--rw-muted);
|
||||
font-size: .82rem;
|
||||
margin: .25rem 0 0;
|
||||
}
|
||||
|
||||
.architecture-arrow {
|
||||
align-self: center;
|
||||
color: var(--rw-muted);
|
||||
font-weight: 800;
|
||||
}
|
||||
|
||||
.rw-card,
|
||||
.content-band,
|
||||
.summary-tile {
|
||||
|
||||
@@ -6,9 +6,11 @@
|
||||
<main class="container py-4">
|
||||
<div class="page-title">
|
||||
<h1>VPD 권한 백오피스</h1>
|
||||
<p>보호 객체, Bearer Token, ORDS 검증 상태를 확인합니다.</p>
|
||||
<p>Oracle Database의 VPD/ORDS 기능을 권한 테이블과 운영 UI로 제어하고 검증합니다.</p>
|
||||
</div>
|
||||
|
||||
<section th:replace="~{fragments/layout :: architectureStrip('')}"></section>
|
||||
|
||||
<div class="alert alert-warning" th:if="${runtimeErrorMessage}">
|
||||
<div class="fw-semibold" th:text="${runtimeErrorTitle}">데이터 처리 오류가 발생했습니다.</div>
|
||||
<div th:text="${runtimeErrorMessage}"></div>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="rw-menu-group">
|
||||
<button class="rw-menu-trigger" type="button">ORDS</button>
|
||||
<button class="rw-menu-trigger" type="button">ORDS 서빙</button>
|
||||
<div class="rw-menu-panel">
|
||||
<a class="nav-link" href="/objects">조회 Handler 생성</a>
|
||||
<a class="nav-link" href="/probe">ORDS 검증</a>
|
||||
@@ -57,5 +57,25 @@
|
||||
</form>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<section th:fragment="architectureStrip(activeLayer)" class="architecture-strip" aria-label="VPD Backoffice architecture">
|
||||
<div class="architecture-step" th:classappend="${activeLayer == 'permission'} ? ' active'">
|
||||
<span class="architecture-kicker">Backoffice Tables</span>
|
||||
<strong>권한 테이블</strong>
|
||||
<p>사용자, 역할, 행 규칙, 컬럼 원문 허용을 저장합니다.</p>
|
||||
</div>
|
||||
<div class="architecture-arrow">→</div>
|
||||
<div class="architecture-step" th:classappend="${activeLayer == 'vpd'} ? ' active'">
|
||||
<span class="architecture-kicker">Oracle Database</span>
|
||||
<strong>VPD Policy</strong>
|
||||
<p>TABLE/VIEW에 policy function을 붙여 DB에서 행 접근을 제한합니다.</p>
|
||||
</div>
|
||||
<div class="architecture-arrow">→</div>
|
||||
<div class="architecture-step" th:classappend="${activeLayer == 'ords'} ? ' active'">
|
||||
<span class="architecture-kicker">Oracle REST Data Services</span>
|
||||
<strong>ORDS 서빙/검증</strong>
|
||||
<p>VPD가 적용된 TABLE/VIEW를 HTTP API로 호출해 결과를 확인합니다.</p>
|
||||
</div>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -6,9 +6,11 @@
|
||||
<main class="container py-4">
|
||||
<div class="page-title">
|
||||
<h1>ORDS 조회 Handler 생성</h1>
|
||||
<p>DB 테이블/뷰를 선택해 Bearer Token 기반 VPD 검증용 ORDS 조회 Handler 경로를 등록하고 생성합니다.</p>
|
||||
<p>VPD가 적용된 TABLE/VIEW를 ORDS HTTP 경로로 서빙하기 위한 조회 Handler를 등록합니다.</p>
|
||||
</div>
|
||||
|
||||
<section th:replace="~{fragments/layout :: architectureStrip('ords')}"></section>
|
||||
|
||||
<div class="alert alert-success" th:if="${message}" th:text="${message}"></div>
|
||||
<div class="alert alert-danger" th:if="${errorMessage}" th:text="${errorMessage}"></div>
|
||||
|
||||
|
||||
@@ -6,9 +6,11 @@
|
||||
<main class="container py-4">
|
||||
<div class="page-title">
|
||||
<h1>권한 관리</h1>
|
||||
<p>역할별 보호 객체 접근과 행 규칙을 저장합니다.</p>
|
||||
<p>VPD policy function이 참조할 사용자, 역할, 행 규칙, 컬럼 원문 허용 규칙을 저장합니다.</p>
|
||||
</div>
|
||||
|
||||
<section th:replace="~{fragments/layout :: architectureStrip('permission')}"></section>
|
||||
|
||||
<div class="alert alert-success" th:if="${message}" th:text="${message}"></div>
|
||||
|
||||
<section class="content-band">
|
||||
|
||||
@@ -6,9 +6,11 @@
|
||||
<main class="container py-4">
|
||||
<div class="page-title">
|
||||
<h1>ORDS 검증</h1>
|
||||
<p>Bearer Token과 보호 객체를 선택해 VPD/Redaction 적용 결과를 확인합니다.</p>
|
||||
<p>ORDS가 서빙하는 TABLE/VIEW 호출 결과로 VPD/Redaction 적용 여부를 확인합니다.</p>
|
||||
</div>
|
||||
|
||||
<section th:replace="~{fragments/layout :: architectureStrip('ords')}"></section>
|
||||
|
||||
<section class="content-band">
|
||||
<div class="section-heading">
|
||||
<h2>ORDS 호출</h2>
|
||||
|
||||
@@ -6,9 +6,11 @@
|
||||
<main class="container py-4">
|
||||
<div class="page-title">
|
||||
<h1>VPD 설정</h1>
|
||||
<p>보호 객체에 적용된 Oracle VPD policy와 policy function/filter predicate를 확인합니다.</p>
|
||||
<p>Oracle Database의 TABLE/VIEW에 VPD policy와 policy function/filter predicate를 적용합니다.</p>
|
||||
</div>
|
||||
|
||||
<section th:replace="~{fragments/layout :: architectureStrip('vpd')}"></section>
|
||||
|
||||
<div class="alert alert-warning" th:if="${runtimeError}">
|
||||
<strong th:text="${runtimeError.title()}">조회할 수 없습니다.</strong>
|
||||
<span th:text="${runtimeError.message()}">message</span>
|
||||
|
||||
Reference in New Issue
Block a user