feat: 대시보드 작업장 현황 지도 구현
- 실시간 작업장 현황을 지도로 시각화 - 작업장 관리 페이지에서 정의한 구역 정보 활용 - TBM 작업자 및 방문자 현황 표시 주요 변경사항: - dashboard.html: 작업장 현황 섹션 추가 (기존 작업 현황 테이블 제거) - workplace-status.js: 지도 렌더링 및 데이터 통합 로직 구현 - modern-dashboard.js: 삭제된 DOM 요소 조건부 체크 추가 시각화 방식: - 인원 없음: 회색 테두리 + 작업장 이름 - 내부 작업자: 파란색 영역 + 인원 수 - 외부 방문자: 보라색 영역 + 인원 수 - 둘 다: 초록색 영역 + 총 인원 수 기술 구현: - Canvas API 기반 사각형 영역 렌더링 - map-regions API를 통한 데이터 일관성 보장 - 클릭 이벤트로 상세 정보 모달 표시 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -193,6 +193,67 @@ cp web-ui/templates/work-layout.html web-ui/pages/work/new-page.html
|
||||
|
||||
---
|
||||
|
||||
## 🔐 페이지 접근 권한 관리
|
||||
|
||||
### 권한 체크 방식
|
||||
1. **관리자 전용 페이지**: `admin-only` 클래스 사용
|
||||
2. **페이지별 권한 체크**: `pages` 테이블 기반 권한 확인
|
||||
3. **클라이언트 측**: `auth-check.js`에서 자동 권한 검증
|
||||
|
||||
### 페이지 등록 (pages 테이블)
|
||||
새 페이지 생성 시 반드시 `pages` 테이블에 등록:
|
||||
|
||||
```sql
|
||||
-- 마이그레이션 예시
|
||||
INSERT INTO pages (page_name, page_url, page_category, description, display_order, is_active)
|
||||
VALUES
|
||||
('출입 신청', '/pages/work/visit-request.html', 'work', '작업장 출입 및 안전교육 신청', 150, 1),
|
||||
('안전관리', '/pages/admin/safety-management.html', 'admin', '출입 신청 승인 및 안전교육 관리', 210, 1);
|
||||
```
|
||||
|
||||
### 페이지 권한 할당
|
||||
- **Admin**: 모든 페이지 자동 접근 가능
|
||||
- **일반 사용자**: `page_access` 테이블에 명시적 권한 부여 필요
|
||||
|
||||
```sql
|
||||
-- 특정 사용자에게 페이지 권한 부여
|
||||
INSERT INTO page_access (user_id, page_id, granted_by, granted_at)
|
||||
VALUES (123, 45, 1, NOW());
|
||||
```
|
||||
|
||||
### HTML 페이지 설정
|
||||
```html
|
||||
<!-- 관리자 전용 페이지 -->
|
||||
<a href="/pages/admin/safety-management.html" class="quick-action-card admin-only">
|
||||
<div class="action-content">
|
||||
<h3>안전관리</h3>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<!-- 모든 사용자 접근 가능 -->
|
||||
<a href="/pages/work/visit-request.html" class="quick-action-card">
|
||||
<div class="action-content">
|
||||
<h3>출입 신청</h3>
|
||||
</div>
|
||||
</a>
|
||||
```
|
||||
|
||||
### API 라우트 보호
|
||||
```javascript
|
||||
const { verifyToken } = require('../middlewares/authMiddleware');
|
||||
|
||||
// 모든 라우트에 인증 필요
|
||||
router.use(verifyToken);
|
||||
|
||||
// 관리자 전용 라우트
|
||||
router.put('/requests/:id/approve', (req, res) => {
|
||||
// verifyToken에서 req.user 제공
|
||||
// 필요시 추가 권한 체크
|
||||
});
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📡 API 개발 가이드
|
||||
- **RESTful**: 명사형 리소스 사용 (`POST /users` O, `/createUser` X).
|
||||
- **응답 포맷**:
|
||||
|
||||
Reference in New Issue
Block a user