# Redmine #494 - 삭제 영향도와 확인 절차 설계

## 프로젝트 개요

VPD Backoffice는 Oracle Database VPD/ORDS 기능을 백오피스 권한 테이블로 제어하는 Spring Boot 관리 도구다. 사용자는 DB schema user가 아니라 Bearer Token으로 식별되는 application user이며, 사용자/그룹/역할/권한 테이블의 조합이 VPD policy function과 redaction 판단에 사용된다.

## 목표

권한, 역할, 그룹 관련 삭제/해제/비활성화 작업 전에 영향 범위를 보여주고, 사용자가 영향 확인을 명시한 경우에만 처리한다.

## 현재 문제

- 역할 삭제 버튼은 연결 사용자, 그룹, 권한이 남아 있어도 영향 범위를 보여주지 않는다.
- 보조 스키마 생성 DDL에는 FK가 없어 연결이 남은 역할을 삭제하면 고아 매핑/권한이 생길 수 있다.
- 권한 삭제 시 해당 역할의 TABLE/VIEW 접근이 사라지고 마지막 권한이면 보호 객체가 비활성화될 수 있지만 화면에서 강조하지 않는다.
- 그룹 비활성화/그룹 사용자 해제/그룹 역할 해제는 VPD effective role 결과를 바꾸지만 확인 절차가 약하다.
- 삭제 검증 실패가 전역 오류 화면으로 빠져 사용자가 원래 화면에서 바로 조치하기 어렵다.

## 설계

- 역할 목록에 삭제 영향 요약을 표시한다.
  - 직접 사용자
  - 연결 그룹
  - 영향 사용자
  - 권한 수와 보호 객체
- 역할 삭제는 서버에서 연결 사용자/그룹/권한이 하나라도 있으면 차단한다.
  - 삭제 전에 사용자 역할, 그룹 역할, 권한을 먼저 해제해야 한다.
  - 연결이 없는 역할도 영향 확인 체크가 있어야 삭제된다.
- 권한 목록에 삭제 영향 요약을 표시한다.
  - 역할이 잃는 TABLE/VIEW 권한
  - 마지막 권한 삭제 시 보호 객체 비활성화 가능성
  - 영향 확인 체크가 없으면 서버에서 차단한다.
- 그룹 화면에 비활성화/해제 영향 요약을 표시한다.
  - 그룹 비활성화는 활성 그룹을 통해 상속되던 역할을 VPD에서 제외한다.
  - 그룹 사용자 해제는 해당 사용자가 그 그룹 역할을 잃는다.
  - 그룹 역할 해제는 그룹 사용자 전체가 해당 역할 권한을 잃는다.
  - 영향 확인 체크가 없으면 서버에서 차단한다.
- 삭제/해제 차단 메시지는 전역 오류 페이지 대신 원래 화면의 error alert로 보여준다.

## 완료 기준

- 역할 목록에서 삭제 영향이 보이고 연결이 있는 역할 삭제는 차단된다.
- 권한 목록에서 삭제 영향과 마지막 권한 경고가 보인다.
- 권한 삭제는 영향 확인 체크 없이는 서버에서 실패한다.
- 그룹 비활성화/사용자 해제/역할 해제는 영향 확인 체크를 요구한다.
- 실패 메시지는 원래 화면 상단에서 확인된다.
- 모바일 화면에서 가로 body overflow가 없다.

## 검증

- `mvn test`
- Playwright:
  - `/roles`, `/permissions`, `/groups` desktop/mobile 렌더링
  - 영향 확인 UI 노출 확인
  - 확인 체크 없는 권한 삭제 시 error alert 확인
  - 모바일 body overflow 없음
