[Developer] #424 show VPD policy details
This commit is contained in:
@@ -2,32 +2,43 @@
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.cloudhandson.vpdbackoffice.mapper.VpdPolicyMapper">
|
||||
<sql id="policyColumns">
|
||||
object_owner,
|
||||
object_name,
|
||||
policy_group,
|
||||
policy_name,
|
||||
pf_owner AS function_owner,
|
||||
package AS package_name,
|
||||
function AS function_name,
|
||||
RTRIM(
|
||||
CASE WHEN sel = 'YES' THEN 'SELECT,' ELSE '' END ||
|
||||
CASE WHEN ins = 'YES' THEN 'INSERT,' ELSE '' END ||
|
||||
CASE WHEN upd = 'YES' THEN 'UPDATE,' ELSE '' END ||
|
||||
CASE WHEN del = 'YES' THEN 'DELETE,' ELSE '' END ||
|
||||
CASE WHEN idx = 'YES' THEN 'INDEX,' ELSE '' END,
|
||||
','
|
||||
) AS statement_types,
|
||||
chk_option AS check_option,
|
||||
enable AS enabled,
|
||||
static_policy,
|
||||
policy_type,
|
||||
long_predicate
|
||||
</sql>
|
||||
|
||||
<select id="findPolicies" resultType="com.cloudhandson.vpdbackoffice.domain.vpd.VpdPolicyView">
|
||||
SELECT
|
||||
object_owner,
|
||||
object_name,
|
||||
policy_group,
|
||||
policy_name,
|
||||
pf_owner AS function_owner,
|
||||
package AS package_name,
|
||||
function AS function_name,
|
||||
RTRIM(
|
||||
CASE WHEN sel = 'YES' THEN 'SELECT,' ELSE '' END ||
|
||||
CASE WHEN ins = 'YES' THEN 'INSERT,' ELSE '' END ||
|
||||
CASE WHEN upd = 'YES' THEN 'UPDATE,' ELSE '' END ||
|
||||
CASE WHEN del = 'YES' THEN 'DELETE,' ELSE '' END ||
|
||||
CASE WHEN idx = 'YES' THEN 'INDEX,' ELSE '' END,
|
||||
','
|
||||
) AS statement_types,
|
||||
chk_option AS check_option,
|
||||
enable AS enabled,
|
||||
static_policy,
|
||||
policy_type,
|
||||
long_predicate
|
||||
SELECT <include refid="policyColumns"/>
|
||||
FROM all_policies
|
||||
ORDER BY object_owner, object_name, policy_name
|
||||
</select>
|
||||
|
||||
<select id="findPolicy" resultType="com.cloudhandson.vpdbackoffice.domain.vpd.VpdPolicyView">
|
||||
SELECT <include refid="policyColumns"/>
|
||||
FROM all_policies
|
||||
WHERE object_owner = UPPER(#{objectOwner,jdbcType=VARCHAR})
|
||||
AND object_name = UPPER(#{objectName,jdbcType=VARCHAR})
|
||||
AND policy_name = UPPER(#{policyName,jdbcType=VARCHAR})
|
||||
</select>
|
||||
|
||||
<select id="findFunctionSource" resultType="string">
|
||||
SELECT LISTAGG(text, '') WITHIN GROUP (ORDER BY line)
|
||||
FROM all_source
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
<!doctype html>
|
||||
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
|
||||
<body>
|
||||
<div th:fragment="detail">
|
||||
<div class="alert alert-warning mb-0" th:if="${errorMessage}" th:text="${errorMessage}"></div>
|
||||
<div class="probe-exchange-grid" th:if="${detail}">
|
||||
<section class="probe-exchange">
|
||||
<h3>Policy Metadata</h3>
|
||||
<pre th:text="${'Object: ' + detail.policy().objectDisplayName()
|
||||
+ '\nPolicy Group: ' + detail.policy().policyGroup()
|
||||
+ '\nPolicy Name: ' + detail.policy().policyName()
|
||||
+ '\nFunction: ' + detail.policy().functionDisplayName()
|
||||
+ '\nStatement Types: ' + detail.policy().statementTypes()
|
||||
+ '\nEnabled: ' + detail.policy().enabled()
|
||||
+ '\nPolicy Type: ' + detail.policy().policyType()
|
||||
+ '\nCheck Option: ' + detail.policy().checkOption()
|
||||
+ '\nStatic Policy: ' + detail.policy().staticPolicy()
|
||||
+ '\nLong Predicate: ' + detail.policy().longPredicate()}"></pre>
|
||||
</section>
|
||||
<section class="probe-exchange">
|
||||
<h3>DBMS_RLS.ADD_POLICY</h3>
|
||||
<pre th:text="${detail.ddl()}"></pre>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -40,7 +40,15 @@
|
||||
<strong th:text="${policy.objectDisplayName()}">ADMIN.TABLE</strong>
|
||||
<div class="text-muted small" th:text="${policy.policyGroup()}">SYS_DEFAULT</div>
|
||||
</td>
|
||||
<td><code th:text="${policy.policyName()}">POLICY</code></td>
|
||||
<td>
|
||||
<button class="btn btn-sm btn-outline-secondary policy-function-button"
|
||||
type="button"
|
||||
th:hx-get="@{/vpd-policies/policy-detail(objectOwner=${policy.objectOwner()},objectName=${policy.objectName()},policyName=${policy.policyName()})}"
|
||||
th:hx-target="${'#policy-source-' + iter.index}"
|
||||
hx-swap="innerHTML">
|
||||
<code th:text="${policy.policyName()}">POLICY</code>
|
||||
</button>
|
||||
</td>
|
||||
<td>
|
||||
<button class="btn btn-sm btn-outline-secondary policy-function-button"
|
||||
type="button"
|
||||
@@ -66,7 +74,7 @@
|
||||
<tr>
|
||||
<td colspan="7" class="policy-source-cell">
|
||||
<div th:id="${'policy-source-' + iter.index}" class="text-muted small">
|
||||
Policy function을 클릭하면 소스가 표시됩니다.
|
||||
Policy 또는 policy function을 클릭하면 상세 내역이 표시됩니다.
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
Reference in New Issue
Block a user