docs: add project docs and test updates

This commit is contained in:
taekyoungc
2026-04-08 00:23:55 +09:00
parent 06fedc866a
commit 06aa401048
238 changed files with 8373 additions and 148 deletions

View File

@@ -0,0 +1,59 @@
# 지자체 데이터 필터 및 권한
> 멀티테넌트 환경에서 **해당 지자체 데이터만** 조회·수정하기 위한 필터 규칙과 권한별 접근.
---
## 1. 로그인 사용자의 지자체 결정
| mb_level | 지자체 식별 | 비고 |
|----------|-------------|------|
| **4 (super admin)** | 없음 | `lg_idx` 조건 없이 전체 조회 |
| **3 (지자체관리자)** | `member.mb_lg_idx` | 해당 지자체만 접근 |
| **2 (지정판매소)** | `designated_shop.ds_lg_idx` (로그인 회원의 `ds_mb_idx`로 조회한 판매소의 지자체) | 해당 지자체 내에서도 자기 판매소(`ds_idx`) 데이터 위주 제한 가능 |
| **1 (일반)** | 없음 | 지자체 필터 없음 또는 본인 데이터만 |
---
## 2. 쿼리 필터 적용
- 지자체별 테이블(`local_government` 제외) 조회·수정·삭제 시 **현재 사용자에 따른 `lg_idx`** 를 구한 뒤 `WHERE lg_idx = ?` 조건 추가.
- **지정판매소 사용자**: 주문 목록 등은 `so_ds_idx = (자기 ds_idx)` 로 추가 제한.
```phpV
// 예: 지자체관리자 — 담당 지자체 데이터만
$lgIdx = session()->get('mb_lg_idx'); // mb_level == 3 일 때 설정
$builder = $productModel->where('pr_lg_idx', $lgIdx);
// 예: 지정판매소 — 자기 판매소 주문만
$dsIdx = session()->get('ds_idx'); // 로그인 시 ds_mb_idx 로 조회한 ds_idx
$builder = $salesOrderModel->where('so_ds_idx', $dsIdx);
```
---
## 3. 적용 위치
- **컨트롤러/서비스**: 목록·상세·등록·수정·삭제 시 "현재 사용자 지자체(ds_idx 포함 여부)"를 세션 또는 서비스에서 구해 쿼리에 반영.
- **필터/미들웨어**: 관리자 라우트에서 `mb_lg_idx`, `ds_idx` 등을 세션·뷰에 넣어 두고, 지자체별 API/화면에서 일괄 적용하면 누락을 줄일 수 있음.
---
## 4. 테이블별 지자체 FK 요약
| 테이블 | 지자체 FK | 비고 |
|--------|-----------|------|
| local_government | — | 테넌트 루트 |
| member | mb_lg_idx (nullable) | 지자체관리자만 설정 |
| designated_shop | ds_lg_idx | |
| product | pr_lg_idx | |
| product_price | pp_lg_idx | |
| packaging_unit | pu_lg_idx | |
| agent | ag_lg_idx | |
| contact | ct_lg_idx | |
| company | co_lg_idx | |
| beneficiary | bf_lg_idx | |
| purchase_order | po_lg_idx | |
| inbound_receipt | ir_lg_idx | |
| sales_order | so_lg_idx | 데이터 격리용 |
| stock_transaction | st_lg_idx | |