60 lines
2.4 KiB
Markdown
60 lines
2.4 KiB
Markdown
|
|
# 지자체 데이터 필터 및 권한
|
||
|
|
|
||
|
|
> 멀티테넌트 환경에서 **해당 지자체 데이터만** 조회·수정하기 위한 필터 규칙과 권한별 접근.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 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 | |
|