refs #723: externalize backoffice catalogs and MCP tools
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="backoffice-can-mutate" th:content="${canMutate}">
|
||||
<meta name="backoffice-read-only" th:content="${readOnlyMode}">
|
||||
<title th:text="${title == 'HMM HR Access Console' ? title : title + ' · HMM HR Access Console'}">HMM HR Access Console</title>
|
||||
<title th:text="${title == (product?.pageTitle() ?: 'Data & AI Backoffice') ? title : title + ' · ' + (product?.pageTitle() ?: 'Data & AI Backoffice')}">Data & AI Backoffice</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="/css/app.css" rel="stylesheet">
|
||||
<script src="https://unpkg.com/htmx.org@2.0.4"></script>
|
||||
@@ -15,7 +15,7 @@
|
||||
<body>
|
||||
<nav th:fragment="nav" class="navbar rw-nav navbar-expand-lg" data-product-nav>
|
||||
<div class="container rw-nav-top">
|
||||
<a class="navbar-brand" href="/">HMM HR Access Console</a>
|
||||
<a class="navbar-brand" href="/" th:text="${product?.displayName() ?: 'Data & AI Backoffice'}">Data & AI Backoffice</a>
|
||||
<div class="rw-menu" aria-label="주요 메뉴">
|
||||
<button class="rw-menu-trigger" type="button" data-submenu-trigger="access" aria-controls="submenu-access" aria-expanded="false">운영 사용자 관리</button>
|
||||
<button class="rw-menu-trigger" type="button" data-submenu-trigger="protection" aria-controls="submenu-protection" aria-expanded="false">보호·검증</button>
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<div class="login-brand">
|
||||
<span class="login-mark">접근</span>
|
||||
<div>
|
||||
<h1>데이터 접근 제어 콘솔</h1>
|
||||
<h1 th:text="${product?.displayName() ?: 'Data & AI Backoffice'}">Data & AI Backoffice</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -108,8 +108,8 @@
|
||||
<thead><tr><th>보호 객체</th><th>DB 정책</th><th>백오피스 활성 컬럼</th><th>DB Redaction 컬럼</th><th>레거시 VPD 컬럼 제어</th><th>DB 정책 활성</th><th>상태 판단</th></tr></thead>
|
||||
<tbody>
|
||||
<tr th:each="status : ${policyStatuses}">
|
||||
<td><code th:text="${status.targetLabel()}">ADMIN.HMM_HR_EMPLOYEES</code></td>
|
||||
<td><code th:text="${status.policyName()}">HMM_EMPLOYEE_PII_REDACT</code></td>
|
||||
<td><code th:text="${status.targetLabel()}">OWNER.OBJECT_NAME</code></td>
|
||||
<td><code th:text="${status.policyName()}">REDACTION_POLICY</code></td>
|
||||
<td th:text="${status.configuredColumnCount()}">0</td>
|
||||
<td th:text="${status.appliedColumnCount()}">0</td>
|
||||
<td><span class="badge" th:classappend="${status.legacyVpdColumnPolicyCount() == 0} ? ' text-bg-secondary' : ' text-bg-danger'" th:text="${status.legacyVpdColumnPolicyCount() == 0} ? '없음' : ${status.legacyVpdColumnPolicyCount() + '건 활성'}">없음</span></td>
|
||||
@@ -142,12 +142,12 @@
|
||||
|
||||
<section class="content-band">
|
||||
<h2>컬럼 마스킹 규칙 등록</h2>
|
||||
<p class="section-subtitle">업무용 이름을 붙여 템플릿을 재사용합니다. 예: <code>HMM_EMAIL_STANDARD</code>.</p>
|
||||
<p class="section-subtitle">업무용 이름을 붙여 템플릿을 재사용합니다. 예: <code>EMAIL_STANDARD</code>.</p>
|
||||
<form method="post" action="/masking-rules" class="form-grid">
|
||||
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}">
|
||||
<label>
|
||||
규칙 코드
|
||||
<input class="form-control" name="ruleCode" maxlength="64" pattern="[A-Za-z][A-Za-z0-9_]{2,63}" required placeholder="HMM_EMAIL_STANDARD">
|
||||
<input class="form-control" name="ruleCode" maxlength="64" pattern="[A-Za-z][A-Za-z0-9_]{2,63}" required placeholder="EMAIL_STANDARD">
|
||||
<span class="form-hint">영문·숫자·밑줄만 사용합니다.</span>
|
||||
</label>
|
||||
<label>
|
||||
@@ -176,7 +176,7 @@
|
||||
<thead><tr><th>코드</th><th>규칙명</th><th>템플릿</th><th>설명</th><th>상태</th><th></th></tr></thead>
|
||||
<tbody>
|
||||
<tr th:each="rule : ${rules}">
|
||||
<td><code th:text="${rule.ruleCode()}">HMM_EMAIL_STANDARD</code></td>
|
||||
<td><code th:text="${rule.ruleCode()}">EMAIL_STANDARD</code></td>
|
||||
<td th:text="${rule.ruleName()}">주민번호 기본 마스킹</td>
|
||||
<td th:text="${rule.templateLabel()}">값 숨김(NULL)</td>
|
||||
<td th:text="${rule.description() ?: '-'}">설명</td>
|
||||
@@ -209,11 +209,11 @@
|
||||
<optgroup th:label="${object.displayName()}" th:if="${!#lists.isEmpty(availableMaskingColumnsByObject[object.objectId()])}">
|
||||
<option th:each="columnName : ${availableMaskingColumnsByObject[object.objectId()]}"
|
||||
th:value="|${object.objectId()}:${columnName}|"
|
||||
th:text="${object.displayName() + '.' + columnName}">ADMIN.HMM_HR_EMPLOYEES.EMAIL</option>
|
||||
th:text="${object.displayName() + '.' + columnName}">OWNER.OBJECT_NAME.COLUMN_NAME</option>
|
||||
</optgroup>
|
||||
</th:block>
|
||||
</select>
|
||||
<span class="form-hint">현재 JSON 카탈로그에 관리 대상 ASO 정책이 있는 객체만 표시됩니다. 예: <code>ADMIN.HMM_HR_EMPLOYEES.EMAIL</code>.</span>
|
||||
<span class="form-hint">환경 설정에 관리 대상 ASO 정책이 있는 업무 데이터 객체만 표시됩니다. 예: <code>OWNER.OBJECT_NAME.COLUMN_NAME</code>.</span>
|
||||
</label>
|
||||
<button class="btn btn-outline-primary" type="submit">대상 컬럼 추가</button>
|
||||
</form>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<h1>MCP 연동</h1>
|
||||
<details class="explanation-details">
|
||||
<summary>도움말</summary>
|
||||
<p>HMM HR MCP는 표준 용어 변환, HR 데이터 조회, HR 규정 PDF 검색의 세 도구를 제공합니다. 모든 도구는 읽기 전용이며, 휴가·근태 표현이 모호하면 용어 변환을 먼저 사용합니다.</p>
|
||||
<p>환경 설정으로 승인한 MCP 도구만 제공합니다. <code>tools/list</code>의 설명과 입력 스키마를 확인한 뒤 사용자 Bearer Token으로 호출하세요.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
@@ -22,18 +22,18 @@
|
||||
<div class="mcp-service-grid">
|
||||
<div class="mcp-service-item">
|
||||
<span>공개 MCP Endpoint</span>
|
||||
<strong><code th:text="${hmmMcpPublicUrl}">https://hmm-backoffice.cloud-handson.com/mcp</code></strong>
|
||||
<strong><code th:text="${hmmMcpPublicUrl}">https://example.com/mcp</code></strong>
|
||||
<small>Private Agent Factory와 외부 MCP client가 사용하는 Streamable HTTP Endpoint입니다.</small>
|
||||
</div>
|
||||
<div class="mcp-service-item">
|
||||
<span>인증</span>
|
||||
<strong><code>Authorization: Bearer <HMM MCP Token></code></strong>
|
||||
<small>고정 MCP 서버 토큰으로 인증합니다. DB 비밀번호와 Wallet은 전달하지 않습니다.</small>
|
||||
<strong><code>Authorization: Bearer <사용자 토큰></code></strong>
|
||||
<small>선택 사용자의 활성 토큰으로 인증합니다. DB 비밀번호와 Wallet은 전달하지 않습니다.</small>
|
||||
</div>
|
||||
<div class="mcp-service-item">
|
||||
<span>도구 수</span>
|
||||
<strong>3개</strong>
|
||||
<small>용어 표준화 → HR 데이터/규정 검색 순서로 사용합니다.</small>
|
||||
<strong th:text="${#lists.size(tools) + '개'}">0개</strong>
|
||||
<small>배포 환경의 MCP 도구 allowlist가 적용됩니다.</small>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -46,8 +46,8 @@
|
||||
<table class="table align-middle">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>HMM MCP</th>
|
||||
<td><code th:text="${hmmMcpPublicUrl}">https://hmm-backoffice.cloud-handson.com/mcp</code></td>
|
||||
<th>MCP</th>
|
||||
<td><code th:text="${hmmMcpPublicUrl}">https://example.com/mcp</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Transport</th>
|
||||
@@ -55,11 +55,11 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<th>백오피스 호환 Endpoint</th>
|
||||
<td><code>/mcp</code> — 로그인 세션에서 같은 HMM 도구 계약을 확인합니다.</td>
|
||||
<td><code>/mcp</code> — 같은 설정 기반 도구 계약을 제공합니다.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Auth</th>
|
||||
<td><code>Authorization: Bearer <HMM MCP Token></code> — 공개 MCP 서버의 고정 인증 토큰입니다.</td>
|
||||
<td><code>Authorization: Bearer <사용자 토큰></code> — 활성 업무 사용자 토큰입니다.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Methods</th>
|
||||
@@ -79,20 +79,18 @@
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Object</th>
|
||||
<th>Agent Tool</th>
|
||||
<th>Instruction / parameter mapping</th>
|
||||
<th>실행 대상</th>
|
||||
<th>Instruction</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr th:each="tool : ${tools}">
|
||||
<td><code th:text="${tool.name()}">ords.query.admin.board_posts</code></td>
|
||||
<td th:text="${tool.displayName()}">ADMIN.BOARD_POSTS</td>
|
||||
<td><code th:text="${tool.ordsPath()}">HMM_HR_TERM_RESOLVER</code></td>
|
||||
<td><code th:text="${tool.ordsPath()}">AGENT_TOOL_OR_SELECT_AI</code></td>
|
||||
<td>
|
||||
<div th:text="${tool.description()}">ORDS 행 접근 조회 도구 설명</div>
|
||||
<small class="text-muted">
|
||||
<code>resolve_hr_term.term</code> → 표준 용어·코드 · <code>search_hr_data.query</code> → HR 데이터 · <code>search_hr_policy.query</code> → 규정 PDF 검색
|
||||
</small>
|
||||
<small class="text-muted">정확한 argument 이름과 필수 여부는 <code>tools/list.inputSchema</code>를 사용합니다.</small>
|
||||
</td>
|
||||
</tr>
|
||||
<tr th:if="${#lists.isEmpty(tools)}">
|
||||
@@ -108,9 +106,9 @@
|
||||
<summary>tools/call parameter 예시 보기</summary>
|
||||
<h2>tools/call Arguments</h2>
|
||||
<pre class="code-block">{
|
||||
"term": "연차 이월"
|
||||
"<tools/list의 argument 이름>": "<조회할 자연어 질문>"
|
||||
}</pre>
|
||||
<p class="form-hint">등록 도구는 <code>resolve_hr_term</code>, <code>search_hr_data</code>, <code>search_hr_policy</code>입니다. 표준 용어가 필요한 질문은 <code>resolve_hr_term</code> 결과를 사용해 데이터 또는 규정 검색을 이어갑니다.</p>
|
||||
<p class="form-hint">도구명, 설명, argument 이름은 배포 환경에서 바뀔 수 있으므로 <code>tools/list</code> 결과를 기준으로 호출합니다.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
@@ -144,9 +142,9 @@
|
||||
"id": 3,
|
||||
"method": "tools/call",
|
||||
"params": {
|
||||
"name": "search_hr_policy",
|
||||
"name": "<tools/list의 name>",
|
||||
"arguments": {
|
||||
"query": "연차 휴가 이월 기준과 제한을 알려줘."
|
||||
"<required argument>": "조회할 자연어 질문"
|
||||
}
|
||||
}
|
||||
}</pre>
|
||||
|
||||
@@ -159,8 +159,8 @@
|
||||
<thead><tr><th>보호 객체</th><th>DB 정책</th><th>백오피스 활성 컬럼</th><th>DB Redaction 컬럼</th><th>상태</th><th>확인 결과</th></tr></thead>
|
||||
<tbody>
|
||||
<tr th:each="status : ${maskingPolicyStatuses}">
|
||||
<td><code th:text="${status.targetLabel()}">ADMIN.HMM_HR_EMPLOYEES</code></td>
|
||||
<td><code th:text="${status.policyName()}">HMM_EMPLOYEE_PII_REDACT</code></td>
|
||||
<td><code th:text="${status.targetLabel()}">OWNER.OBJECT_NAME</code></td>
|
||||
<td><code th:text="${status.policyName()}">REDACTION_POLICY</code></td>
|
||||
<td th:text="${status.configuredColumnCount()}">0</td>
|
||||
<td th:text="${status.appliedColumnCount()}">0</td>
|
||||
<td><span class="badge" th:classappend="${' ' + status.badgeClass()}" th:text="${status.statusLabel()}">적용됨</span></td>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<h1>역할</h1>
|
||||
<details class="explanation-details">
|
||||
<summary>도움말</summary>
|
||||
<p>스마일게이트 Data & AI PoC 운영 역할을 관리합니다. 역할은 사용자에게 직접 부여하거나 그룹을 통해 부여할 수 있습니다.</p>
|
||||
<p><span th:text="${product?.displayName() ?: 'Data & AI Backoffice'}">Data & AI Backoffice</span>의 운영 역할을 관리합니다. 역할은 사용자에게 직접 부여하거나 그룹을 통해 부여할 수 있습니다.</p>
|
||||
</details>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -10,10 +10,10 @@
|
||||
<details class="explanation-details">
|
||||
<summary>도움말</summary>
|
||||
<p>
|
||||
<code th:text="${catalog.owner()}">OWNER</code>의 승인된 업무 테이블 table/column comment와 Oracle annotation을 조회·수정합니다.
|
||||
<code th:text="${catalogOwner}">OWNER</code>의 승인된 업무 TABLE/VIEW comment와 컬럼 comment를 조회·수정합니다.
|
||||
Select AI profile의 <code>comments=true</code>, <code>annotations=true</code> 설정에서는 이 값들이 SQL 생성 근거로 들어갑니다.
|
||||
</p>
|
||||
<p class="mb-0">임의 스키마나 임의 테이블은 수정하지 않고, JSON 카탈로그가 승인한 업무 테이블만 대상으로 합니다.</p>
|
||||
<p class="mb-0">Oracle annotation은 TABLE에서만 관리합니다. 임의 스키마나 임의 객체는 수정하지 않습니다.</p>
|
||||
</details>
|
||||
</section>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<div class="section-heading">
|
||||
<div>
|
||||
<h2>테이블 선택</h2>
|
||||
<p class="section-subtitle" th:text="${catalog.catalogDescription()}">승인된 업무 원장만 표시합니다.</p>
|
||||
<p class="section-subtitle"><span th:text="${product.dataName()}">업무 데이터</span> 카탈로그에 등록된 TABLE/VIEW만 표시합니다.</p>
|
||||
</div>
|
||||
<span class="badge text-bg-secondary" th:text="${#lists.size(tables)}">6</span>
|
||||
</div>
|
||||
@@ -34,8 +34,8 @@
|
||||
th:classappend="${entry.key() == selectedKey} ? ' is-selected'"
|
||||
th:href="@{/schema-metadata(table=${entry.key()})}">
|
||||
<strong th:text="${entry.businessName()}">직원 원장</strong>
|
||||
<code th:text="${entry.tableName()}">HMM_HR_EMPLOYEES</code>
|
||||
<small th:text="${entry.description()}">직원·조직 정보</small>
|
||||
<code th:text="${entry.tableName()}">OBJECT_NAME</code>
|
||||
<small><span th:text="${entry.objectType()}">TABLE</span> · <span th:text="${entry.description()}">설명</span></small>
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
@@ -43,10 +43,10 @@
|
||||
<section class="content-band" th:if="${metadata}">
|
||||
<div class="section-heading">
|
||||
<div>
|
||||
<span class="badge text-bg-secondary">TABLE</span>
|
||||
<span class="badge text-bg-secondary" th:text="${metadata.table().objectType()}">TABLE</span>
|
||||
<h2 class="mt-2" th:text="${metadata.table().businessName()}">직원 원장</h2>
|
||||
<p class="section-subtitle">
|
||||
<code th:text="${catalog.owner() + '.' + metadata.table().tableName()}">OWNER.TABLE_NAME</code>
|
||||
<code th:text="${catalogOwner + '.' + metadata.table().tableName()}">OWNER.OBJECT_NAME</code>
|
||||
<span th:text="${' · ' + metadata.table().description()}"> · 설명</span>
|
||||
</p>
|
||||
</div>
|
||||
@@ -63,13 +63,13 @@
|
||||
<button class="btn rw-btn-primary mt-2" type="submit">테이블 comment 저장</button>
|
||||
</form>
|
||||
|
||||
<div class="section-heading">
|
||||
<div class="section-heading" th:if="${metadata.table().isTable()}">
|
||||
<div>
|
||||
<h3>Table annotations</h3>
|
||||
<p class="section-subtitle">기존 annotation은 값 수정 또는 빈 값 저장으로 삭제할 수 있습니다.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="table-responsive">
|
||||
<div class="table-responsive" th:if="${metadata.table().isTable()}">
|
||||
<table class="table table-sm align-middle">
|
||||
<thead><tr><th style="width: 220px;">Annotation</th><th>Value</th><th style="width: 110px;"></th></tr></thead>
|
||||
<tbody>
|
||||
@@ -146,7 +146,7 @@
|
||||
<button class="btn btn-sm rw-btn-primary mt-2" type="submit">컬럼 comment 저장</button>
|
||||
</form>
|
||||
|
||||
<div class="table-responsive mt-3">
|
||||
<div class="table-responsive mt-3" th:if="${metadata.table().isTable()}">
|
||||
<table class="table table-sm align-middle">
|
||||
<thead><tr><th style="width: 220px;">Annotation</th><th>Value</th><th style="width: 110px;"></th></tr></thead>
|
||||
<tbody>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<h1>시스템 설정</h1>
|
||||
<details class="explanation-details">
|
||||
<summary>도움말</summary>
|
||||
<p>HMM HR 질의와 Agent Factory는 HMM MCP를 사용합니다. ORDS는 기존 VPD/ORDS 운영 기능이 필요한 경우에만 별도로 설정합니다.</p>
|
||||
<p><span th:text="${product?.displayName() ?: 'Data & AI Backoffice'}">Data & AI Backoffice</span>의 MCP 공개 주소와 선택형 레거시 ORDS 연결을 확인합니다.</p>
|
||||
</details>
|
||||
</div>
|
||||
|
||||
@@ -22,9 +22,9 @@
|
||||
<section class="content-band">
|
||||
<div class="section-heading">
|
||||
<div>
|
||||
<span class="architecture-kicker">HMM MCP · 현재 사용</span>
|
||||
<h2>HMM HR Agent 도구</h2>
|
||||
<p class="section-subtitle">용어 정규화, HR 데이터 조회, HR 정책 문서 검색은 이 MCP의 DBMS_CLOUD_AI_AGENT 도구를 사용합니다.</p>
|
||||
<span class="architecture-kicker">MCP · 현재 사용</span>
|
||||
<h2>설정 기반 MCP 도구</h2>
|
||||
<p class="section-subtitle">환경에서 승인한 도구 계약과 사용자 Bearer Token 인증을 사용합니다.</p>
|
||||
</div>
|
||||
</div>
|
||||
<label class="span-2">
|
||||
@@ -39,7 +39,7 @@
|
||||
<div>
|
||||
<span class="architecture-kicker">선택형 레거시 연동</span>
|
||||
<h2>ORDS Base URL</h2>
|
||||
<p class="section-subtitle">기존 VPD/ORDS 접근 검증과 ORDS Handler 운영에만 사용합니다. 비워 두면 해당 기능은 미설정 상태로 표시되며 HMM HR 질의에는 영향이 없습니다.</p>
|
||||
<p class="section-subtitle">기존 VPD/ORDS 접근 검증과 ORDS Handler 운영에만 사용합니다. 비워 두면 해당 기능은 미설정 상태로 표시됩니다.</p>
|
||||
</div>
|
||||
</div>
|
||||
<form method="post" action="/settings/ords" class="form-grid">
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
<h1>정형 데이터 조회</h1>
|
||||
<details class="explanation-details">
|
||||
<summary>도움말</summary>
|
||||
<p th:text="${catalog.pageHelp()}">승인된 업무 원장만 읽기 전용으로 조회합니다.</p>
|
||||
<p class="mb-0" th:text="${'한 번에 최대 ' + catalog.rowLimit() + '건까지만 표시합니다.'}">한 번에 최대 50건까지만 표시합니다.</p>
|
||||
<p>환경 설정에 등록된 <span th:text="${product.dataName()}">업무 데이터</span> 객체를 읽기 전용으로 조회합니다. 임의 SQL이나 수정 기능은 제공하지 않습니다.</p>
|
||||
<p class="mb-0">한 번에 최대 50건까지만 표시합니다.</p>
|
||||
</details>
|
||||
</div>
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
<section class="content-band">
|
||||
<div class="section-heading">
|
||||
<div>
|
||||
<h2>조회할 원장 선택</h2>
|
||||
<p class="section-subtitle" th:text="${catalog.catalogDescription()}">승인된 정형 테이블만 표시합니다.</p>
|
||||
<h2>조회할 업무 데이터 선택</h2>
|
||||
<p class="section-subtitle"><code th:text="${catalogOwner}">OWNER</code> 스키마에서 환경 설정으로 승인한 TABLE/VIEW만 표시합니다.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="structured-table-grid">
|
||||
@@ -30,8 +30,8 @@
|
||||
th:classappend="${entry.key() == selectedKey} ? ' is-selected'"
|
||||
th:href="@{/structured-data(table=${entry.key()})}">
|
||||
<strong th:text="${entry.businessName()}">직원 원장</strong>
|
||||
<code th:text="${entry.tableName()}">HMM_HR_EMPLOYEES</code>
|
||||
<small th:text="${entry.description()}">직원·조직 정보</small>
|
||||
<code th:text="${entry.tableName()}">OBJECT_NAME</code>
|
||||
<small><span th:text="${entry.objectType()}">TABLE</span> · <span th:text="${entry.description()}">업무 데이터</span></small>
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
@@ -43,7 +43,7 @@
|
||||
<div>
|
||||
<h2 th:text="${preview.table().businessName()}">직원 원장</h2>
|
||||
<p class="section-subtitle">
|
||||
<code th:text="${catalog.owner() + '.' + preview.table().tableName()}">OWNER.TABLE_NAME</code>
|
||||
<code th:text="${catalogOwner + '.' + preview.table().tableName()}">OWNER.OBJECT_NAME</code>
|
||||
<span th:text="${' · 최대 ' + preview.rowLimit() + '건'}"> · 최대 50건</span>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
<select class="form-select" name="userId" required>
|
||||
<option value="">선택하세요</option>
|
||||
<option th:each="user : ${users}" th:value="${user.userId()}" th:attr="data-user-label=${user.username()}"
|
||||
th:text="${user.username() + ' (' + user.empNo() + ')'}">KB_VPD_ADMIN</option>
|
||||
th:text="${user.username() + ' (' + user.empNo() + ')'}">demo-user</option>
|
||||
</select>
|
||||
</label>
|
||||
<label>
|
||||
@@ -39,7 +39,7 @@
|
||||
data-result=${columnRule.template().previewResult()},
|
||||
data-aso-function=${columnRule.template().asoFunction()},
|
||||
data-context=${'MR_' + columnRule.columnId()}"
|
||||
th:text="${columnRule.targetLabel() + ' · ' + columnRule.ruleLabel()}">KB_CUSTOMERS.RRN_MASKED</option>
|
||||
th:text="${columnRule.targetLabel() + ' · ' + columnRule.ruleLabel()}">OWNER.OBJECT_NAME.COLUMN_NAME</option>
|
||||
</select>
|
||||
</label>
|
||||
<div>
|
||||
@@ -85,8 +85,8 @@
|
||||
<thead><tr><th>사용자</th><th>대상 컬럼</th><th>기본 규칙</th><th>원문 표시 상태</th><th>상태</th><th></th></tr></thead>
|
||||
<tbody>
|
||||
<tr th:each="userRule : ${userRules}">
|
||||
<td th:text="${userRule.username()}">KB_VPD_ADMIN</td>
|
||||
<td><code th:text="${userRule.targetLabel()}">POC_2.KB_CUSTOMERS.RRN_MASKED</code></td>
|
||||
<td th:text="${userRule.username()}">demo-user</td>
|
||||
<td><code th:text="${userRule.targetLabel()}">OWNER.OBJECT_NAME.COLUMN_NAME</code></td>
|
||||
<td th:text="${userRule.ruleLabel()}">주민번호 기본 마스킹 · 주민등록번호 부분 마스킹</td>
|
||||
<td><span class="badge" th:classappend="${userRule.unmasked()} ? ' text-bg-success' : ' text-bg-secondary'" th:text="${userRule.decisionLabel()}">원문 표시 예외</span></td>
|
||||
<td th:text="${userRule.activeYn()}">Y</td>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<h1>사용자</h1>
|
||||
<details class="explanation-details">
|
||||
<summary>도움말</summary>
|
||||
<p>스마일게이트 Data & AI PoC 도구를 사용할 운영 사용자를 관리합니다. 게임 서비스 이용자나 Oracle DB 계정과는 별개의 백오피스 관리 대상입니다.</p>
|
||||
<p><span th:text="${product?.displayName() ?: 'Data & AI Backoffice'}">Data & AI Backoffice</span>에서 사용할 운영 사용자를 관리합니다. 업무 시스템 사용자와 Oracle DB 계정은 별개로 관리됩니다.</p>
|
||||
</details>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -82,8 +82,8 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr th:each="policy : ${policies}">
|
||||
<td><code th:text="${policy.objectDisplayName()}">POC_2.KB_CONTRACTS</code></td>
|
||||
<td><code th:text="${policy.policyName()}">KB_KB_CONTRACTS_ROW_POLICY</code></td>
|
||||
<td><code th:text="${policy.objectDisplayName()}">OWNER.OBJECT_NAME</code></td>
|
||||
<td><code th:text="${policy.policyName()}">ROW_ACCESS_POLICY</code></td>
|
||||
<td th:text="${policy.statementTypes()}">SELECT</td>
|
||||
<td><span class="badge" th:classappend="${policy.enabled() == 'YES'} ? ' text-bg-success' : ' text-bg-secondary'" th:text="${policy.enabled() == 'YES'} ? '적용됨' : '중지됨'">적용됨</span></td>
|
||||
<td><code th:text="${policy.functionDisplayName()}">ADMIN.CB_AGENT_DOC_VPD_FILTER</code></td>
|
||||
|
||||
Reference in New Issue
Block a user