fix #424: use dropdowns for VPD policy form
This commit is contained in:
@@ -38,6 +38,47 @@
|
||||
ORDER BY p.object_owner, p.object_name, p.policy_name
|
||||
</select>
|
||||
|
||||
<select id="findPolicyNameOptions" resultType="string">
|
||||
SELECT DISTINCT policy_name
|
||||
FROM all_policies
|
||||
WHERE policy_name IS NOT NULL
|
||||
UNION
|
||||
SELECT object_name || '_POLICY'
|
||||
FROM cb_protected_object
|
||||
WHERE enabled_yn = 'Y'
|
||||
ORDER BY 1
|
||||
</select>
|
||||
|
||||
<select id="findOwnerOptions" resultType="string">
|
||||
SELECT USER FROM dual
|
||||
UNION
|
||||
SELECT owner FROM cb_protected_object WHERE enabled_yn = 'Y'
|
||||
UNION
|
||||
SELECT pf_owner FROM all_policies WHERE pf_owner IS NOT NULL
|
||||
ORDER BY 1
|
||||
</select>
|
||||
|
||||
<select id="findFunctionOptions" resultType="com.cloudhandson.vpdbackoffice.domain.vpd.VpdFunctionOption">
|
||||
WITH allowed_owners AS (
|
||||
SELECT USER AS owner FROM dual
|
||||
UNION
|
||||
SELECT owner FROM cb_protected_object WHERE enabled_yn = 'Y'
|
||||
UNION
|
||||
SELECT pf_owner FROM all_policies WHERE pf_owner IS NOT NULL
|
||||
)
|
||||
SELECT owner,
|
||||
package_name,
|
||||
object_name AS function_name,
|
||||
CASE WHEN package_name IS NULL THEN 'FUNCTION' ELSE 'PACKAGE FUNCTION' END AS object_type
|
||||
FROM all_arguments
|
||||
WHERE owner IN (SELECT owner FROM allowed_owners)
|
||||
AND position = 0
|
||||
AND data_type = 'VARCHAR2'
|
||||
AND object_name IS NOT NULL
|
||||
ORDER BY owner, package_name, function_name
|
||||
FETCH FIRST 300 ROWS ONLY
|
||||
</select>
|
||||
|
||||
<select id="findPolicy" resultType="com.cloudhandson.vpdbackoffice.domain.vpd.VpdPolicyView">
|
||||
SELECT <include refid="policyColumns"><property name="alias" value="p."/></include>
|
||||
FROM all_policies p
|
||||
|
||||
@@ -348,6 +348,18 @@ body {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.checkbox-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: .75rem 1rem;
|
||||
min-height: 2.45rem;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.checkbox-row .form-check {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.rw-btn,
|
||||
.btn {
|
||||
border-radius: 999px;
|
||||
|
||||
@@ -32,20 +32,52 @@
|
||||
</label>
|
||||
<label>
|
||||
Policy 이름
|
||||
<input class="form-control" name="policyName" placeholder="예: BOARD_POSTS_POLICY" required>
|
||||
<select class="form-select" name="policyName" required>
|
||||
<option th:each="policyName : ${formOptions.policyNames()}"
|
||||
th:value="${policyName}"
|
||||
th:text="${policyName}"></option>
|
||||
</select>
|
||||
</label>
|
||||
<label class="span-2">
|
||||
기존 Function 선택
|
||||
<select class="form-select" name="functionKey">
|
||||
<option value="">Filter predicate로 새 function 자동 생성</option>
|
||||
<option th:each="function : ${formOptions.functions()}"
|
||||
th:value="${function.value()}"
|
||||
th:text="${function.label()}"></option>
|
||||
</select>
|
||||
</label>
|
||||
<label>
|
||||
Function Owner
|
||||
<input class="form-control" name="functionOwner" placeholder="비우면 현재 연결 사용자">
|
||||
<select class="form-select" name="functionOwner">
|
||||
<option value="">현재 연결 사용자</option>
|
||||
<option th:each="owner : ${formOptions.owners()}"
|
||||
th:value="${owner}"
|
||||
th:text="${owner}"></option>
|
||||
</select>
|
||||
</label>
|
||||
<label>
|
||||
Function 이름
|
||||
<input class="form-control" name="functionName" placeholder="비우면 POLICY_NAME_FILTER 자동 생성">
|
||||
<select class="form-select" name="functionName">
|
||||
<option value="">POLICY_NAME_FILTER 자동 생성</option>
|
||||
<option th:each="function : ${formOptions.functions()}"
|
||||
th:value="${function.functionName()}"
|
||||
th:text="${function.functionName()}"></option>
|
||||
</select>
|
||||
</label>
|
||||
<label>
|
||||
<div>
|
||||
Statement Types
|
||||
<input class="form-control" name="statementTypes" value="SELECT" placeholder="SELECT,INSERT,UPDATE,DELETE">
|
||||
</label>
|
||||
<div class="checkbox-row">
|
||||
<label class="form-check" th:each="statement : ${formOptions.statementTypes()}">
|
||||
<input class="form-check-input"
|
||||
type="checkbox"
|
||||
name="statementTypes"
|
||||
th:value="${statement}"
|
||||
th:checked="${statement == 'SELECT'}">
|
||||
<span class="form-check-label" th:text="${statement}">SELECT</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-check align-self-end">
|
||||
<input class="form-check-input" id="vpd-enabled" type="checkbox" name="enabled" value="true" checked>
|
||||
<label class="form-check-label" for="vpd-enabled">등록 즉시 활성화</label>
|
||||
|
||||
Reference in New Issue
Block a user