diff --git a/.gitbook/assets/2019-11-09_130627.png b/.gitbook/assets/2019-11-09_130627.png new file mode 100644 index 0000000..5424e15 Binary files /dev/null and b/.gitbook/assets/2019-11-09_130627.png differ diff --git a/.gitbook/assets/byncnd.jpg b/.gitbook/assets/byncnd.jpg new file mode 100644 index 0000000..17ea412 Binary files /dev/null and b/.gitbook/assets/byncnd.jpg differ diff --git a/.gitbook/assets/image (1).png b/.gitbook/assets/image (1).png new file mode 100644 index 0000000..74e4ca3 Binary files /dev/null and b/.gitbook/assets/image (1).png differ diff --git a/.gitbook/assets/image (10).png b/.gitbook/assets/image (10).png new file mode 100644 index 0000000..887ab23 Binary files /dev/null and b/.gitbook/assets/image (10).png differ diff --git a/.gitbook/assets/image (11).png b/.gitbook/assets/image (11).png new file mode 100644 index 0000000..0d5ffb9 Binary files /dev/null and b/.gitbook/assets/image (11).png differ diff --git a/.gitbook/assets/image (12).png b/.gitbook/assets/image (12).png new file mode 100644 index 0000000..4657409 Binary files /dev/null and b/.gitbook/assets/image (12).png differ diff --git a/.gitbook/assets/image (13).png b/.gitbook/assets/image (13).png new file mode 100644 index 0000000..e3953c1 Binary files /dev/null and b/.gitbook/assets/image (13).png differ diff --git a/.gitbook/assets/image (14).png b/.gitbook/assets/image (14).png new file mode 100644 index 0000000..bda380e Binary files /dev/null and b/.gitbook/assets/image (14).png differ diff --git a/.gitbook/assets/image (15).png b/.gitbook/assets/image (15).png new file mode 100644 index 0000000..d3b2cb8 Binary files /dev/null and b/.gitbook/assets/image (15).png differ diff --git a/.gitbook/assets/image (16).png b/.gitbook/assets/image (16).png new file mode 100644 index 0000000..9f1a0d7 Binary files /dev/null and b/.gitbook/assets/image (16).png differ diff --git a/.gitbook/assets/image (17).png b/.gitbook/assets/image (17).png new file mode 100644 index 0000000..9f1a0d7 Binary files /dev/null and b/.gitbook/assets/image (17).png differ diff --git a/.gitbook/assets/image (18).png b/.gitbook/assets/image (18).png new file mode 100644 index 0000000..8866c9b Binary files /dev/null and b/.gitbook/assets/image (18).png differ diff --git a/.gitbook/assets/image (19).png b/.gitbook/assets/image (19).png new file mode 100644 index 0000000..8866c9b Binary files /dev/null and b/.gitbook/assets/image (19).png differ diff --git a/.gitbook/assets/image (2).png b/.gitbook/assets/image (2).png new file mode 100644 index 0000000..d0cb8e3 Binary files /dev/null and b/.gitbook/assets/image (2).png differ diff --git a/.gitbook/assets/image (20).png b/.gitbook/assets/image (20).png new file mode 100644 index 0000000..83ea616 Binary files /dev/null and b/.gitbook/assets/image (20).png differ diff --git a/.gitbook/assets/image (21).png b/.gitbook/assets/image (21).png new file mode 100644 index 0000000..63a2d32 Binary files /dev/null and b/.gitbook/assets/image (21).png differ diff --git a/.gitbook/assets/image (22).png b/.gitbook/assets/image (22).png new file mode 100644 index 0000000..f968e09 Binary files /dev/null and b/.gitbook/assets/image (22).png differ diff --git a/.gitbook/assets/image (23).png b/.gitbook/assets/image (23).png new file mode 100644 index 0000000..3ac5537 Binary files /dev/null and b/.gitbook/assets/image (23).png differ diff --git a/.gitbook/assets/image (3).png b/.gitbook/assets/image (3).png new file mode 100644 index 0000000..e85127f Binary files /dev/null and b/.gitbook/assets/image (3).png differ diff --git a/.gitbook/assets/image (4).png b/.gitbook/assets/image (4).png new file mode 100644 index 0000000..58c4b96 Binary files /dev/null and b/.gitbook/assets/image (4).png differ diff --git a/.gitbook/assets/image (5).png b/.gitbook/assets/image (5).png new file mode 100644 index 0000000..b62427d Binary files /dev/null and b/.gitbook/assets/image (5).png differ diff --git a/.gitbook/assets/image (6).png b/.gitbook/assets/image (6).png new file mode 100644 index 0000000..bf2ebb1 Binary files /dev/null and b/.gitbook/assets/image (6).png differ diff --git a/.gitbook/assets/image (7).png b/.gitbook/assets/image (7).png new file mode 100644 index 0000000..bf2ebb1 Binary files /dev/null and b/.gitbook/assets/image (7).png differ diff --git a/.gitbook/assets/image (8).png b/.gitbook/assets/image (8).png new file mode 100644 index 0000000..d32d7ad Binary files /dev/null and b/.gitbook/assets/image (8).png differ diff --git a/.gitbook/assets/image (9).png b/.gitbook/assets/image (9).png new file mode 100644 index 0000000..c6ce022 Binary files /dev/null and b/.gitbook/assets/image (9).png differ diff --git a/.gitbook/assets/image.png b/.gitbook/assets/image.png new file mode 100644 index 0000000..74e4ca3 Binary files /dev/null and b/.gitbook/assets/image.png differ diff --git "a/.gitbook/assets/\352\267\270\353\246\2741.png" "b/.gitbook/assets/\352\267\270\353\246\2741.png" new file mode 100644 index 0000000..633a89a Binary files /dev/null and "b/.gitbook/assets/\352\267\270\353\246\2741.png" differ diff --git "a/.gitbook/assets/\352\267\270\353\246\2742.png" "b/.gitbook/assets/\352\267\270\353\246\2742.png" new file mode 100644 index 0000000..a1c70f2 Binary files /dev/null and "b/.gitbook/assets/\352\267\270\353\246\2742.png" differ diff --git "a/.gitbook/assets/\354\202\254\354\247\204\354\240\234\353\263\264.png" "b/.gitbook/assets/\354\202\254\354\247\204\354\240\234\353\263\264.png" new file mode 100644 index 0000000..8e9ee55 Binary files /dev/null and "b/.gitbook/assets/\354\202\254\354\247\204\354\240\234\353\263\264.png" differ diff --git "a/.gitbook/assets/\354\235\230\352\262\254\354\240\234\354\266\234.png" "b/.gitbook/assets/\354\235\230\352\262\254\354\240\234\354\266\234.png" new file mode 100644 index 0000000..cad5e55 Binary files /dev/null and "b/.gitbook/assets/\354\235\230\352\262\254\354\240\234\354\266\234.png" differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..45760cb --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +--- +description: 강원과학고등학교 통합 이석 관리 플랫폼 이석찬의 활용 가이드북입니다. +--- + +# 이석찬 매뉴얼 :: 홈 + +{% hint style="success" %} +본 문서는 2019년 11월 09일 생성, 2019년 11월 09일 최종 수정되었습니다. +{% endhint %} + +{% hint style="info" %} + 2018-2019 KSHS Pointer 26th. All Rights Reserved. +{% endhint %} + diff --git a/SUMMARY.md b/SUMMARY.md new file mode 100644 index 0000000..5b394b7 --- /dev/null +++ b/SUMMARY.md @@ -0,0 +1,41 @@ +# Table of contents + +* [이석찬 매뉴얼 :: 홈](README.md) + +## 메인 + +* [사이트 접속 방법](main/access.md) +* [메인화면](main/main/README.md) + * [이미지 저작권 표시](main/main/image-lisence.md) + * [의견 제출](main/main/submit-opinion.md) + * [사진 제출](main/main/submit-image.md) + * [개인정보처리방침](main/main/privacy\_policy.md) + * [서비스 저작권 표시](main/main/undefined.md) +* [이석찬 설치하기](main/installation.md) + +## 기본 기능 + +* [개요](basic-functionalities/overview.md) +* [이석 신청](basic-functionalities/apply.md) +* [이석 확인](basic-functionalities/check.md) +* [이석 관리](basic-functionalities/manage.md) + +## 기능 심화 + +* [개요](advanced-functionalities/overview.md) +* [인증](advanced-functionalities/authentication.md) +* [권한인가](advanced-functionalities/authorization.md) + +## API + +* [개요](api/overview.md) +* [기본 API](api/basic-api/README.md) + * [Auth](api/basic-api/auth.md) + * [Iseok](api/basic-api/iseok.md) + * [Period](api/basic-api/period.md) + * [Room](api/basic-api/room.md) + +## 관리자 가이드 + +* [개요](undefined/undefined.md) +* [전역설정](undefined/undefined-1.md) diff --git a/advanced-functionalities/authentication.md b/advanced-functionalities/authentication.md new file mode 100644 index 0000000..8534c76 --- /dev/null +++ b/advanced-functionalities/authentication.md @@ -0,0 +1,2 @@ +# 인증 + diff --git a/advanced-functionalities/authorization.md b/advanced-functionalities/authorization.md new file mode 100644 index 0000000..2219fd8 --- /dev/null +++ b/advanced-functionalities/authorization.md @@ -0,0 +1,53 @@ +# 권한인가 + +이석찬의 권한 정책은 역할 기반 접근 제어 모델(Role-based Access Control, RBAC)를 따릅니다. + +사용자와 역할을 1:1 관계이며 각 역할에 아래와 같은 역할 비트 플래그를 지정할 수 있습니다. + +| 이름 | 내 | 비트 | +| -------------- | --------------------------------------------------------------------------- | --- | +| 접근 권한 플래그 | 이석 신청 / 이석 관리 / 이석 확인 / API / 관리자 페이지 / 기숙사 관리 / 학생 벌점 관리 페이지 접근 권한을 설정합니다. | 8 | +| 이석 상태 변경 권한 플래 | 1단계 / 2단계 / 3단계 / 4단계 / 5단계 이석 상태를 설정할 수 있는 권한을 설합니다. | 5 | +| 파일 접근 권한 플래 | 이석찬에 업로드 된 파일에 접근할 수 있는 권한을 설정합니다. | 12 | + +각 비트 플래그에 대한 자세한 내용은 아래와 같습니다. + +#### 1. 접근 권한 플래그 + +| 상수 이름 | 비트 | 정수 | 설 | +| --------------------------------- | -------- | --- | ---------- | +| FLAG\_PERM\_ACCESS\_ISEOK\_APPLY | 00000001 | 1 | 이석 신청 페이지 | +| FLAG\_PERM\_ACCESS\_ISEOK\_CHECK | 00000010 | 2 | 이석 확인 페이지 | +| FLAG\_PERM\_ACCESS\_ISEOK\_MANAGE | 00000100 | 4 | 이석 관리 페이 | +| FLAG\_PERM\_ACCESS\_API | 00001000 | 8 | 이석찬 API | +| FLAG\_PERM\_ACCESS\_ADMIN | 00010000 | 16 | 관리자 페이지 | +| FLAG\_PERM\_ACCESS\_DORMITORY | 00100000 | 32 | 기숙사 관리 페이지 | +| FLAG\_PERM\_ACCESS\_PENALTY | 01000000 | 64 | 벌점 관리 페이 | +| FLAG\_PERM\_ACCESS\_BLANK1 | 10000000 | 128 | 여분 비트 플래 | + +#### 2. 이석 상태 변경 권한 플래 + +| 상수 이름 | 비트 | 정수 값 | 설명 | +| ------------------------------------ | -------- | ---- | --------------- | +| FLAG\_PERM\_ISEOK\_STATUS\_UPDATE\_1 | 00000001 | 1 | 이석 상태 1단계 설정 권한 | +| FLAG\_PERM\_ISEOK\_STATUS\_UPDATE\_2 | 00000010 | 2 | 이석 상태 2단계 설정 권한 | +| FLAG\_PERM\_ISEOK\_STATUS\_UPDATE\_3 | 00000100 | 4 | 이석 상태 3단계 설정 권한 | +| FLAG\_PERM\_ISEOK\_STATUS\_UPDATE\_4 | 00001000 | 8 | 이석 상태 4단계 설정 권한 | +| FLAG\_PERM\_ISEOK\_STATUS\_UPDATE\_5 | 00010000 | 16 | 이석 상태 5단계 설정 권한 | + +#### 3. 파일 접근 권한 플래그 + +| 상수 이름 | 비트 | 정수 | 설 | +| -------------------------------- | ------------ | ---- | ----------------- | +| FLAG\_PERM\_FILE\_MY\_CREATE | 000000000001 | 1 | 개인 파일에 대한 업로드 권한 | +| FLAG\_PERM\_FILE\_MY\_READ | 000000000010 | 2 | 개인 파일에 대한 읽기 권한 | +| FLAG\_PERM\_FILE\_MY\_UPDATE | 000000000100 | 4 | 개인 파일에 대한 수정 권한 | +| FLAG\_PERM\_FILE\_MY\_DELETE | 000000001000 | 8 | 개인 파일에 대한 삭제 권한 | +| FLAG\_PERM\_FILE\_PUBLIC\_CREATE | 000000010000 | 16 | 공개 파일에 대한 업로드 권한 | +| FLAG\_PERM\_FILE\_PUBLIC\_READ | 000000100000 | 32 | 공개 파일에 대한 읽기 권한 | +| FLAG\_PERM\_FILE\_PUBLIC\_UPDATE | 000001000000 | 64 | 공개 파일에 대한 수정 권한 | +| FLAG\_PERM\_FILE\_PUBLIC\_DELETE | 000010000000 | 128 | 공개 파일에 대한 삭제 권한 | +| FLAG\_PERM\_FILE\_SYSTEM\_CREATE | 000100000000 | 256 | 시스템 파일에 대한 업로드 권한 | +| FLAG\_PERM\_FILE\_SYSTEM\_READ | 001000000000 | 512 | 시스템 파일에 대한 읽기 권한 | +| FLAG\_PERM\_FILE\_SYSTEM\_UPDATE | 010000000000 | 1024 | 시스템 파일에 대한 수정 권한 | +| FLAG\_PERM\_FILE\_SYSTEM\_DELETE | 100000000000 | 2048 | 시스템 파일에 대한 삭제 권한 | diff --git a/advanced-functionalities/overview.md b/advanced-functionalities/overview.md new file mode 100644 index 0000000..fc39d39 --- /dev/null +++ b/advanced-functionalities/overview.md @@ -0,0 +1,7 @@ +--- +description: 기능 심화 그룹에 대한 개요를 담습니다. +--- + +# 개요 + +기능 심화에서는 이석찬의 핵심 기능들이 어떠한 원리에 의해 구동되는지에 대해 기술합니다. diff --git a/api/basic-api/README.md b/api/basic-api/README.md new file mode 100644 index 0000000..bbaca5a --- /dev/null +++ b/api/basic-api/README.md @@ -0,0 +1,17 @@ +--- +description: 기본 API 사용 설명에 대한 안내입니다. +--- + +# 기본 API + +## 기본 API란? + +기본 API는 특별한 권한 없이 접근할 수 있는 API를 말합니다. 이 API에서는 제거된 항목에 대해서는 다루지 않습니다. 따라서 모든 결과값의 데이터 제거 시각은 실제 사용에 의미가 없으며 반환된 모든 데이터는 제거되지 않은 데이터입니다. + +{% hint style="info" %} +관리자의 재량에 따라 기본 API도 접근이 제한될 수 있습니다. (IP 제한, 시간당 요청 수 제한 등) +{% endhint %} + +## 이석찬 API 활용하기 + +이석찬 API의 ROOT URL은 `https://api.iseokchan.com/api/` 입니다. diff --git a/api/basic-api/auth.md b/api/basic-api/auth.md new file mode 100644 index 0000000..e77cb89 --- /dev/null +++ b/api/basic-api/auth.md @@ -0,0 +1,66 @@ +--- +description: 인증과 관련된 API 명세입니다. +--- + +# Auth + +{% swagger baseUrl="https://api.iseokchan.com" path="/v1/auth/login" method="post" summary="Login" %} +{% swagger-description %} +로그인을 위한 API 입니다. 로그인 성공 시 JWT 토큰을 반환하며, 로그아웃 실패 시 404 Not Found를 반환합니다. +{% endswagger-description %} + +{% swagger-parameter in="query" name="username" type="string" %} +Username +{% endswagger-parameter %} + +{% swagger-parameter in="query" name="password" type="string" %} +User Password +{% endswagger-parameter %} + +{% swagger-response status="200" description="When success fully logged in." %} +```javascript +// 302 Temporary Redirect to root +// JWT token will be offered to Cookie. +``` +{% endswagger-response %} + +{% swagger-response status="404" description="When login failed." %} +``` +{ + "status": 404, + "error": 404, + "messages": { + "error": "Not Found" + } +} +``` +{% endswagger-response %} +{% endswagger %} + +{% swagger baseUrl="https://api.iseokchan.com/" path="v1/auth/logout" method="get" summary="Logout" %} +{% swagger-description %} +로그아웃을 위한 API 입니다. 로그아웃 성공 시 200 OK를 반환하며, 로그아웃 실패 시 401 Unauthorized를 반환합니다. +{% endswagger-description %} + +{% swagger-response status="200" description="When successfully logged out." %} +```javascript +// no content +``` +{% endswagger-response %} + +{% swagger-response status="401" description="When logout failed." %} +``` +{ + "status": 401, + "error": 401, + "messages": { + "error": "Unauthorized" + } +} +``` +{% endswagger-response %} +{% endswagger %} + +{% hint style="warning" %} +Auth API는 인증 관련 API로 사용자의 민감한 정보에 접근합니다. 따라서 이석찬은 해당 API 사용 기록을 로그하며, 과도한 요청이 이루어지는 경우 일시적으로 요청이 차단될 수 있습니다. +{% endhint %} diff --git a/api/basic-api/iseok.md b/api/basic-api/iseok.md new file mode 100644 index 0000000..e7ef33d --- /dev/null +++ b/api/basic-api/iseok.md @@ -0,0 +1,385 @@ +--- +description: 이석과 관계된 API입니다. +--- + +# Iseok + +{% swagger baseUrl="https://api.iseokchan.com" path="/v1/iseok/:id" method="get" summary="이석 받아오기" %} +{% swagger-description %} +​특정 이석 혹은 여러 이석들에 대한 정보를 받아옵니다. 반환되는 정보는 아래와 같습니다. + +\ + + + + +\ + + + + +_이석 아이디, 이석 종류 아이디, 지도교사 아이디, 이석 장소, 이석 이유, 이석 시작 시각, 이석 종료 시각, 이석 생성 시각, 이석 수정 시각_ +{% endswagger-description %} + +{% swagger-parameter in="path" name="id" type="integer" %} +이석 아이디입니다. 이석 아이디가 지정되어 있으면 한 이석만을 받아오고, 지정되어 있지 않다면 조건에 해당 하는 모든 이석을 받아옵니다. +{% endswagger-parameter %} + +{% swagger-parameter in="query" name="limit" type="integer" %} +조회할 이석의 수 입니다. 1 미만일 수 없습니다. +{% endswagger-parameter %} + +{% swagger-parameter in="query" name="start_time" type="integer" %} +이 값이 지정되면 이석 시작 시각의 UNIX 타임 스탬프가 이 값을 초과하는 이석을 받아옵니다. +{% endswagger-parameter %} + +{% swagger-parameter in="query" name="end_time" type="integer" %} +이 값이 지정되면 이석 종료 시각의 UNIX 타임 스탬프가 이 값 미만인 이석을 받아옵니다. +{% endswagger-parameter %} + +{% swagger-response status="200" description="정상적으로 이석을 받아오는 경우입니다." %} +``` +{ + "status": 200, + "results": [ + { + "id": "58", + "type_id": "1", + "teacher_id": "5", + "location": "양현재 2실", + "reason": "a", + "start_time": "2020-05-03 13:20:00", + "end_time": "2020-05-03 18:00:00", + "created_at": "2020-05-03 14:32:45", + "updated_at": null, + "deleted_at": null + } + ] +} +``` +{% endswagger-response %} + +{% swagger-response status="404" description="이석 아이디 값에 해당되는 이석이 존재하지 않거나 조건에 부합하지 않는 경우입니다." %} +``` +{ + "status": 404, + "error": 404, + "messages": { + "error": "Not Found" + } +} +``` +{% endswagger-response %} +{% endswagger %} + +{% swagger baseUrl="https://api.iseokchan.com" path="/v1/iseok/status/:id" method="get" summary="이석 상태 받아오기" %} +{% swagger-description %} +특정 이석 혹은 여러 이석의 이석 상태를 받아옵니다. 반환되는 이석 상태는 등록 시각 기준 내림차순으로 정렬되어있습니다. 반환되는 정보는 아래와 같습니다. + +\ + + + + +_이석 상태 아이디, 상태에 해당되는 이석 아이디, 상태를 지정학 교사 아이디, 부가 메시지, 등록 시각_ +{% endswagger-description %} + +{% swagger-parameter in="path" name="id" type="integer" %} +조회할 특정 이석의 아이디를 지정합니다. +{% endswagger-parameter %} + +{% swagger-parameter in="query" name="target_time" type="integer" %} +특정 시각의 UNIX_TIMESTAMP로 이 시각 이후에 등록된 이석 상태만 받아옵니다. +{% endswagger-parameter %} + +{% swagger-parameter in="query" name="limit" type="string" %} +조회할 이석 상태의 수 입니다. 1 미만일 수 없습니다. +{% endswagger-parameter %} + +{% swagger-parameter in="body" name="iseok[]" type="array" %} +조회할 이석 아이디 목록을 지정합니다. +{% endswagger-parameter %} + +{% swagger-response status="200" description="정상적으로 이석 상태를 받아온 경우입니다." %} +``` +{ + "status": 200, + "results": [ + { + "id": "9", + "iseok_id": "58", + "teacher_id": null, + "status": "292", + "message": "b", + "created_at": "2020-05-03 16:09:46", + "deleted_at": null + }, + { + "id": "8", + "iseok_id": "58", + "teacher_id": "5", + "status": "36", + "message": "a", + "created_at": "2020-05-03 14:33:57", + "deleted_at": null + } + ] +} +``` +{% endswagger-response %} + +{% swagger-response status="400" description="특정 아이디 값 혹은 조회할 아이디 목록 둘 중 하나라도 지정되어있지 않은 경우입니다." %} +``` +{ + "status": 400, + "error": 400, + "messages": { + "error": "Bad Request" + } +} +``` +{% endswagger-response %} + +{% swagger-response status="404" description="기준에 부합하는 이석 상태가 없는 경우입니다." %} +``` +{ + "status": 404, + "error": 404, + "messages": { + "error": "Not Found" + } +} +``` +{% endswagger-response %} +{% endswagger %} + +{% swagger baseUrl="https://api.iseokchan.com" path="/v1/iseok/student/:id" method="get" summary="이석과 학생 같이 받아오기" %} +{% swagger-description %} +특정 이석 혹은 여러 이석의 정보를 참가하는 학생의 정보와 같이 받아옵니다. 반환되는 정보는 아래와 같습니다. + +\ + + + + +_이석 아이디, 이석 종류 아이디, 지도교사 아이디, 이석 장소, 이석 이유, 이석 시작 시각, 이석 종료 시각, 이석 생성 시각, 이석 수정 시각, 참여 학생 아이디 목록_ +{% endswagger-description %} + +{% swagger-parameter in="path" name="id" type="integer" %} +이석 아이디입니다. 이석 아이디가 지정되어 있으면 한 이석만을 받아오고, 지정되어 있지 않다면 조건에 해당 하는 모든 이석을 받아옵니다. +{% endswagger-parameter %} + +{% swagger-parameter in="query" name="limit" type="integer" %} +조회할 이석의 수 입니다. 1 미만일 수 없습니다. +{% endswagger-parameter %} + +{% swagger-parameter in="query" name="start_time" type="integer" %} +이 값이 지정되면 이석 시작 시각의 UNIX 타임 스탬프가 이 값을 초과하는 이석을 받아옵니다. +{% endswagger-parameter %} + +{% swagger-parameter in="query" name="end_time" type="integer" %} +이 값이 지정되면 이석 종료 시각의 UNIX 타임 스탬프가 이 값 미만인 이석을 받아옵니다. +{% endswagger-parameter %} + +{% swagger-response status="200" description="정상적으로 이석과 학생 정보를 같이 받아온 경우입니다." %} +``` +{ + "status": 200, + "results": [ + { + "id": 58, + "type_id": "1", + "teacher_id": "5", + "location": "양현재 2실", + "reason": "a", + "start_time": "2020-05-03 13:20:00", + "end_time": "2020-05-03 18:00:00", + "created_at": "2020-05-03 14:32:45", + "updated_at": null, + "deleted_at": null, + "students": [ + { + "student_id": "37" + }, + { + "student_id": "38" + } + ] + } + ] +} +``` +{% endswagger-response %} + +{% swagger-response status="404" description="이석 아이디 값에 해당되는 이석이 존재하지 않거나 조건에 부합하지 않는 경우입니다." %} +``` +{ + "status": 404, + "error": 404, + "messages": { + "error": "Not Found" + } +} + +``` +{% endswagger-response %} +{% endswagger %} + +{% swagger baseUrl="https://api.iseokchan.com" path="/v1/iseok/type" method="get" summary="이석 종류 받아오기" %} +{% swagger-description %} +이석 종류를 받아옵니다. 반환되는 정보는 아래와 같습니다. + +\ + + + + +_이석 종류 아이디, 이석 종류 이름, 이석 종류 단축 이름, 이석 종류 대표 색, 이석 신청 시 최소 시간, 이석 신청 시 최대 시간, 이석 신청 시 최소 학생 수, 이석 신청 시 최대 학생 수, 이석 가능 여부, 이석 신청 시 바로 승인될 단계 수, 기타 설정 플래그 값, 등록 시각, 수정 시각_ +{% endswagger-description %} + +{% swagger-parameter in="query" name="iseokable" type="boolean" %} +이석 종류의 이석 가능 여부입니다. 값이 없을 경우 true로 취급됩니다. +{% endswagger-parameter %} + +{% swagger-response status="200" description="정상적으로 이석 종류를 받아온 경우입니다." %} +``` +{ + "status": 200, + "results": [ + { + "id": "1", + "name": "이석", + "short_name": "이", + "color": "4294967295", + "minimum_seconds": null, + "maximum_seconds": null, + "maximum_students": null, + "minimum_students": null, + "iseokable": "1", + "instant_iseok_step": "2", + "flag": "127", + "created_at": "2020-04-05 21:12:51", + "updated_at": "2020-04-15 22:51:02", + "deleted_at": null + }, + { + "id": "2", + "name": "외출", + "short_name": "출", + "color": null, + "minimum_seconds": null, + "maximum_seconds": null, + "maximum_students": null, + "minimum_students": null, + "iseokable": "1", + "instant_iseok_step": "0", + "flag": "127", + "created_at": "2020-04-05 21:12:51", + "updated_at": "2020-04-13 23:12:56", + "deleted_at": null + }, + { + "id": "3", + "name": "외박", + "short_name": "박", + "color": null, + "minimum_seconds": null, + "maximum_seconds": null, + "maximum_students": null, + "minimum_students": null, + "iseokable": "1", + "instant_iseok_step": "0", + "flag": "191", + "created_at": "2020-04-05 21:12:51", + "updated_at": "2020-04-13 23:12:59", + "deleted_at": null + }, + { + "id": "4", + "name": "컴퓨터", + "short_name": "컴", + "color": null, + "minimum_seconds": null, + "maximum_seconds": null, + "maximum_students": "1", + "minimum_students": "1", + "iseokable": "1", + "instant_iseok_step": "2", + "flag": "93", + "created_at": "2020-04-05 21:12:51", + "updated_at": "2020-04-15 23:52:59", + "deleted_at": null + } + ] +} +``` +{% endswagger-response %} +{% endswagger %} + +{% swagger baseUrl="https://api.iseokchan.com" path="/v1/iseok/apply" method="post" summary="이석 신청하기" %} +{% swagger-description %} +이석을 신청합니다. 필수 파라미터를 제외한 타 파라미터들은 이석 종류에 따라 필수 여부가 달라질 수 있습니다. 이석 종류를 확인 후 전송을 추천합니다. +{% endswagger-description %} + +{% swagger-parameter in="query" name="type" type="integer" %} +이석 종류의 id 값 +{% endswagger-parameter %} + +{% swagger-parameter in="body" name="students[]" type="array" %} +이석을 신청하는 학생들의 id 값 배열 +{% endswagger-parameter %} + +{% swagger-parameter in="body" name="teacher" type="integer" %} +지도교사 아이디 값 +{% endswagger-parameter %} + +{% swagger-parameter in="body" name="location" type="string" %} +이석 장소 +{% endswagger-parameter %} + +{% swagger-parameter in="body" name="start_time" type="integer" %} +이석 시작 시각의 UNIX 타임스탬프 +{% endswagger-parameter %} + +{% swagger-parameter in="body" name="end_time" type="integer" %} +이석 종료 시각의 UNIX 타임스탬프 +{% endswagger-parameter %} + +{% swagger-parameter in="body" name="reason" type="string" %} +이석 사유 +{% endswagger-parameter %} + +{% swagger-response status="201" description="이석 신청 성공 시 응답입니다." %} +``` +{ + "status": 201, + "results": null +} +``` +{% endswagger-response %} + +{% swagger-response status="400" description="파라미터 오류, 이석 금지 등의 사유로 이석 신청 실패 시 응답입니다." %} +``` +{ + "status": 400, + "error": 400, + "messages": { + "students": "이석이(가) 금지된 학생입니다 : 홍길동" + } +} +``` +{% endswagger-response %} + +{% swagger-response status="409" description="학생/교사 일정 혹은 이미 신청된 이석으로 인해 이석 신청 실패 시 응답입니다." %} +``` +{ + "status": 409, + "error": 409, + "messages": { + "students": "홍길동 학생은 해당 시간에 이석이(가) 있습니다." + } +} +``` +{% endswagger-response %} +{% endswagger %} + diff --git a/api/basic-api/period.md b/api/basic-api/period.md new file mode 100644 index 0000000..7ac83d3 --- /dev/null +++ b/api/basic-api/period.md @@ -0,0 +1,204 @@ +--- +description: 교시와 관계된 API입니다. +--- + +# Period + +{% swagger baseUrl="https://api.iseokchan.com" path="/v1/period/group/:id" method="get" summary="교시 그룹 받아오기" %} +{% swagger-description %} +교시 그룹과 그 그룹에 해당하는 교시 목록을 받아옵니다. 반환되는 값은 아래와 같습니다. + +\ + + + + +\ + + + + +_교시 그룹 아이디, 교시 그룹 별칭, 교시 그룹 짧은 별칭, 교시 그룹 시작 시각, 교시 그룹 종료 시각, 교시 그룹 대표 색, 교시 그룹 대표 아이콘, 교시 목록_ + +\ + + + + +\ + + +교시 목록은 아래와 같이 구성됩니다. + +\ + + + + +\ + + + + +_교시 아이디, 해당하는 날짜, 교시 별칭, 교시 짧은 별칭, 교시 시작 시각, 교시 종료 시각, 공휴일 교시 여부_ + +\ + + + +{% endswagger-description %} + +{% swagger-parameter in="path" name="id" type="string" %} +조회할 교시 그룹의 아이디입니다. +{% endswagger-parameter %} + +{% swagger-parameter in="query" name="target_time" type="number" %} +특정 시각의 UNIX_TIMESTAMP로, 해당 시각을 기준으로 그 날의 교시 그룹을 받아옵니다. +{% endswagger-parameter %} + +{% swagger-response status="200" description="성공적으로 교시 그룹을 받아온 경우입니다." %} +``` +{ + "status": 200, + "results": [ + { + "period_group_id": "3", + "period_group_alias": "오전 교시 그룹", + "period_group_short_alias": "오전", + "period_group_start_time": "08:20:00", + "period_group_end_time": "12:20:00", + "period_group_color": "4294967295", + "period_group_icon": null, + "periods": [ + { + "id": "66", + "day_of_week": "1", + "alias": "1교시", + "short_alias": "1", + "start_time": "09:00:00", + "end_time": "10:00:00", + "is_holiday": "0" + }, + { + "id": "67", + "day_of_week": "1", + "alias": "2교시", + "short_alias": "2", + "start_time": "10:10:00", + "end_time": "11:10:00", + "is_holiday": "0" + }, + { + "id": "68", + "day_of_week": "1", + "alias": "3교시", + "short_alias": "3", + "start_time": "11:20:00", + "end_time": "12:20:00", + "is_holiday": "0" + } + ] + }, + { + "period_group_id": "4", + "period_group_alias": "오후 교시 그룹", + "period_group_short_alias": "오후", + "period_group_start_time": "13:10:00", + "period_group_end_time": "18:00:00", + "period_group_color": "4294937600", + "period_group_icon": "sun", + "periods": [ + { + "id": "69", + "day_of_week": "1", + "alias": "오후 1교시", + "short_alias": "1", + "start_time": "13:20:00", + "end_time": "14:20:00", + "is_holiday": "0" + }, + { + "id": "70", + "day_of_week": "1", + "alias": "오후 2교시", + "short_alias": "2", + "start_time": "14:30:00", + "end_time": "15:30:00", + "is_holiday": "0" + }, + { + "id": "71", + "day_of_week": "1", + "alias": "오후 3교시", + "short_alias": "3", + "start_time": "15:40:00", + "end_time": "16:50:00", + "is_holiday": "0" + }, + { + "id": "72", + "day_of_week": "1", + "alias": "오후 4교시", + "short_alias": "4", + "start_time": "17:00:00", + "end_time": "18:00:00", + "is_holiday": "0" + } + ] + }, + { + "period_group_id": "2", + "period_group_alias": "야간 교시 그룹", + "period_group_short_alias": "야간", + "period_group_start_time": "19:00:00", + "period_group_end_time": "23:30:00", + "period_group_color": "4286611584", + "period_group_icon": "moon", + "periods": [ + { + "id": "73", + "day_of_week": "1", + "alias": "야간 1교시", + "short_alias": "1", + "start_time": "19:00:00", + "end_time": "20:00:00", + "is_holiday": "0" + }, + { + "id": "74", + "day_of_week": "1", + "alias": "야간 2교시", + "short_alias": "2", + "start_time": "20:10:00", + "end_time": "21:10:00", + "is_holiday": "0" + }, + { + "id": "75", + "day_of_week": "1", + "alias": "야간 3교시", + "short_alias": "3", + "start_time": "21:20:00", + "end_time": "22:20:00", + "is_holiday": "0" + } + ] + } + ] +} +``` +{% endswagger-response %} + +{% swagger-response status="404" description="조건에 부합하는 교시 그룹을 찾을 수 없는 경우입니다." %} +``` +{ + "status": 404, + "error": 404, + "messages": { + "error": "Not Found" + } +} +``` +{% endswagger-response %} +{% endswagger %} + diff --git a/api/basic-api/room.md b/api/basic-api/room.md new file mode 100644 index 0000000..948fa14 --- /dev/null +++ b/api/basic-api/room.md @@ -0,0 +1,95 @@ +--- +description: 교실과 관련된 API 입니다. +--- + +# Room + +{% swagger baseUrl="https://api.iseokchan.com" path="/v1/room/:id" method="get" summary="모든 교실 혹은 특정 교실 받아오기" %} +{% swagger-description %} +id 값이 없다면, 등록된 모든 교실을 받아옵니다. + +\ + + +id 값이 있다면, 특정 교실을 받아옵니다. +{% endswagger-description %} + +{% swagger-parameter in="path" name="id" type="number" %} +교실 id 값입니다. 지정되지 않으면 모든 교실을 가져옵니다. +{% endswagger-parameter %} + +{% swagger-parameter in="query" name="studyroom" type="boolean" %} +학습실 여부입니다. 지정되지 않으면 학습실 여부에 관계 없이 값을 가져옵니다. +{% endswagger-parameter %} + +{% swagger-parameter in="query" name="iseokable" type="boolean" %} +이석 가능 여부입니다. 지정되지 않으면 이석 가능 여부에 관계 없이 값을 가져옵니다. +{% endswagger-parameter %} + +{% swagger-response status="200" description="교실 정보가 정상적으로 받아온 상태입니다." %} +``` +{ + "status": 200, + "results": [ + { + "id": "1", + "is_studyroom": "0", + "alias": "사감실", + "short_alias": "사감실", + "iseokable": "1", + "seatmap_id": null, + "created_at": "2020-01-16 19:40:49", + "updated_at": "2020-02-29 14:08:44", + "deleted_at": null + }, + { + "id": "2", + "is_studyroom": "0", + "alias": "1-1반", + "short_alias": "1-1반", + "iseokable": "1", + "seatmap_id": null, + "created_at": "2020-01-16 19:40:49", + "updated_at": "2020-01-26 22:30:18", + "deleted_at": null + }, + { + "id": "3", + "is_studyroom": "1", + "alias": "양현재 1실", + "short_alias": "1실", + "iseokable": "1", + "seatmap_id": "4", + "created_at": "2020-01-16 19:40:49", + "updated_at": "2020-02-29 19:22:54", + "deleted_at": null + }, + { + "id": "6", + "is_studyroom": "0", + "alias": "연구부", + "short_alias": null, + "iseokable": "1", + "seatmap_id": null, + "created_at": "2020-02-28 19:07:02", + "updated_at": "2020-02-28 19:44:22", + "deleted_at": null + } + ] +} +``` +{% endswagger-response %} + +{% swagger-response status="404" description="조건에 해당하는 교실이 존재하지 않는 경우입니다." %} +``` +{ + "status": 404, + "error": 404, + "messages": { + "error": "Not Found" + } +} +``` +{% endswagger-response %} +{% endswagger %} + diff --git a/api/overview.md b/api/overview.md new file mode 100644 index 0000000..20d4fcd --- /dev/null +++ b/api/overview.md @@ -0,0 +1,122 @@ +--- +description: 본 페이지는 이석찬 API Document에 대한 개요를 담은 페이지입니다. +--- + +# 개요 + +### 구성 + +본 API 문서는 아래와 같은 형식으로 구성되어있습니다. + +{% swagger baseUrl="API 루트 주소" path="API 경로" method="get" summary="API 이름" %} +{% swagger-description %} +API 상세 설명 +{% endswagger-description %} + +{% swagger-parameter in="path" name="경로 파라미터" type="string" %} +경로 파라미터 설명 +{% endswagger-parameter %} + +{% swagger-parameter in="header" name="헤더" type="string" %} +헤더 설명 +{% endswagger-parameter %} + +{% swagger-parameter in="query" name="쿼리 파라미터" type="string" %} +쿼리 파라미터 설명 +{% endswagger-parameter %} + +{% swagger-parameter in="body" name="폼 데이터" type="string" %} +폼 데이터 설명 +{% endswagger-parameter %} + +{% swagger-response status="200" description="HTTP 응답 코드 상세 설명" %} +``` +반환 예 +``` +{% endswagger-response %} +{% endswagger %} + +위 API에서 파라미터가 의미하는 바는 아래와 같습니다. + +* 경로 파라미터 + + /v1/iseok/:id 에서 _:id_ 와 같이 표기되며 경로에 직접적으로 포함되는 파라미터입니다. +* 헤더 + + HTTP 요청 시에 포함 되어야 할 헤더입니다. +* 쿼리 파라미터 + + /v1/iseok?id=1 에서 _id=1_ 과 같이 표기되며 GET 파라미터를 의미합니다. +* _폼 데이터_ + + 요청 주소 상으로는 보이지 않는 POST 요청 시에 전송하여야할 파라미터를 의미합니다. + +대부분의 API에서는 GET과 POST 파리미터(쿼리 파라미터와 폼 데이터)에 특별한 구분을 두지 않습니다. 그러나 그렇지 않은 경우도 있으므로 API 명세에 명시된 요청 방법을 준수하는 것을 권장합니다. + +이석찬의 모든 API는 JSON 형식의 응답을 반환하며 그 예시는 아래와 같습니다. + +{% tabs %} +{% tab title="성공 응답" %} +``` +// 성공적인 요청에 대한 응답은 아래와 같이 상태코드와 결과값을 반환합니다. +{ + "status": 200, + "results": [ + { + "name": "홍길동" + } + ] +} +``` +{% endtab %} + +{% tab title="일반 실패 응답" %} +``` +// 일반적인 실패에 대한 응답은 아래와 같이 상태코드와 메시지를 반환합니다. +{ + "status": 400, + "error": 400, + "messages": { + "error": "sample error" + } +} +``` +{% endtab %} + +{% tab title="Form 실패 응답" %} +``` +// Form을 통해 호출된 API의 경우 아래와 같이 해당되는 항목에 대한 오류 메시지로 구성됩니다. +{ + "status": 400, + "error": 400, + "messages": { + "username" : "username should be letters : [a-z][A-Z]", + "password": "password should be less than 32 letters" + } +} +``` +{% endtab %} +{% endtabs %} + +### CORS 문제 + +도메인이 다른 웹페이지에서, 이석찬의 API를 사용하기 위해서는 CORS 도메인 등록을 하여야합니다. CORS 도메인은 이석찬 관리자 패널에서 설정할 수 있습니다. + +### 용어 정의 + +본 API 문서에서 자주 사용되는 용어의 정의입니다. + +* 특정 : '**특정한 한**'의 줄임말입니다. 특정 이석이란 **하나**의 이석을 의미하며 다수의 이석을 의미하지 않습니다. 따라서, 특정 데이터를 받아오는 것은 특정한 **한** 데이터를 받아오는 것으로 해석될 수 있습니다. + +### 주의사항 + +1. 시간 \ + + + 이석찬의 시간 표기는 64bit UNIX 타임스탬프를 이용하고 있습니다. UNIX 타임스탬프란 1970년 1월 1일 00:00:00 UTC 로부터 경과된 초를 나타낸 것입니다. 그러나 저장공간의 한계로 1970년 1월 1일 이전 시각은 조회할 수 없으며 그 이후 100억년이 초과되는 시간 쿼리에 대해서는 제약이 발생할 수 있습니다. 더불어 이석찬 서비스가 구현되는 시스템은 64bit 기반이어야 하며, 그렇지 않은 경우 2038년 문제라고 알려진 오버플로우 문제가 발생할 여지가 있습니다.\ + \ + 이석찬의 시각 비교는 **모두** 등호가 없는 연산입니다. 따라서 이 API 문서를 비롯한 이석찬 내의 모든 시간 비교에 대하여 이후와 초과, 이전과 미만은 동치이며 시간과 시간의 포함 비교에서 시작과 끝 경계점이 동일한 경우에는 포함 관계가 성립한다고 보지 않습니다. + +{% hint style="warning" %} +본 주의사항에 명시된 내용을 지키지 않아 발생한 시스템 상의 오류 및 피해에 대한 책임은 본 시스템을 사용하는 사람에게 있습니다. +{% endhint %} diff --git a/basic-functionalities/apply.md b/basic-functionalities/apply.md new file mode 100644 index 0000000..820f2f5 --- /dev/null +++ b/basic-functionalities/apply.md @@ -0,0 +1,19 @@ +--- +description: 이석 신청 기능에 대한 설명입니다. +--- + +# 이석 신청 + +### 이석 신청 페이지 + +이석은 `이석 종류`에 따라 신청에 필요한 필수 정보가 다릅니다. 아래와 같은 양식이 기본입니다. + +![이석 신청 기본 양식](<../.gitbook/assets/image (1).png>) + +이석 종류를 변경할 때 마다, 해당 이석 종류에 필요한 양식을 불러옵니다. 가령, `컴퓨터`라는 이석 종류의 경우, 지도교사 및 이석 사유를 필요로 하지 않기 때문에 아래와 같은 양식이 불러와지게 됩니다. + +![다른 이석 종류(컴퓨터)의 신청 기본 양식](<../.gitbook/assets/image (2).png>) + +이석 종류 및 그에 따른 신청 양식은 정해진 것이 아니며 언제든 관리자에 의해 변경될 수 있습니다. 이와 관련하여서는 관리자 기능 > 이석 > 이석 종류 를 참조하십시오. + +이석을 신청하기 위해서는 자신이 신청 하고자 하는 이석 종류를 선택한 후 양식을 모두 채우고 `신청하기` 버튼을 클릭하면 됩니다. 또한 일부 허가받은 사용자의 경우 `바로승인` 버튼을 클릭하여 해당 이석의 신청과 승인을 동시에 처리할 수 있습니다. 다만, 승인은 해당 사용자가 수정 가능한 최종 승인 단계만 가능합니다. diff --git a/basic-functionalities/check.md b/basic-functionalities/check.md new file mode 100644 index 0000000..efbb029 --- /dev/null +++ b/basic-functionalities/check.md @@ -0,0 +1,62 @@ +--- +description: 이석 확인 기능에 대한 설명입니다. +--- + +# 이석 확인 + +### 개요 + +이석 확인 기능은 `학습실`에서 자습하는 학생들의 이석 정보를 편리하게 모아 볼 수 있는 기능입니다. 이석 확인 기능을 위한 부가 정보들은 아래와 같습니다. 이 부가 정보들은 기본값이 정해져 있으며, 처음 `이석 확인` 메뉴를 클릭했을 시 자동으로 설정됩니다. + +| 부가 정보 이름 | 부가 정보 설명 | 기본값 | +| -------- | ------------- | ------------------------- | +| 학습실 | 조회할 학습실 | 우선순위가 가장 높은 학습실 | +| 기준 시각 | 이석을 조회할 기준 시각 | 현재 시각 | +| 교시 그룹 | 이석을 조회할 교시 그룹 | 현재 시각에 해당하는 교시가 속해있는 교시그룹 | + +각 부가 정보에 대한 상세한 설명은 기능 심화 > 데이터 를 참조하시기 바랍니다. + +위 부가 정보들은 이석 확인 페이지 상단의 정보 표시줄에서 확인 및 변경할 수 있습니다. + +### 이석 확인 페이지 + +이석 확인 기능의 정보 표시줄은 아래와 같이 구성 되어있습니다. + +![이석 확인 기능 정보 표시줄](<../.gitbook/assets/image (15).png>) + +| 번호 | 설명 | +| -- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 1 | 현재 선택된 학습실의 전체 이름을 나타냅니다. | +| 2 | 현재 정보를 표시하고 있는 기준 시각을 나타냅니다. 이 기준 시각은 학생의 학적, 기본 교시 그룹 및 이석 정보를 조회하는데에 사용됩니다. | +| 3 | 선택 가능한 학습실 목록을 단축 이름을 사용하여 나타냅니다. 현재 선택된 학습실은 회색(선택됨)으로 표시됩니다. 우선순위가 높은 학습실은 표시줄에 나열되며, 그렇지 않은 학습실들은 부가 메뉴(우측 '선택' 메뉴 참고) 를 이용하여 선택 가능합니다. | +| 4 | 기준 시각을 변경할 수 있는 시각 선택기입니다. '기준 시각 검색'을 클릭하면 기준 시각을 변경할 수 있는 팝업이 표시되며 돋보기 모양 아이콘을 클릭하여 기준 시각을 변경할 수 있습니다. 팝업을 통해 시각을 선택한 이후에도 키보드를 사용하여 상세 시각을 변경할 수 있습니다. | +| 5 | 기준 시각을 선택할 수 있는 팝업입니다. 날짜를 클릭하면 시간, 분을 차례로 선택할 수 있고 '지금' 버튼을 클릭하면 현재 시각을 선택할 수 있습니다. 5분 단위로만 시간 조정이 가능하며 시간의 상세 변경에 관한 사항은 4번 항목에 대한 설명을 참조하시기 바랍니다. 연도 및 월을 변경 하려면 현재 연도와 월이 표시된 부분('2021년 1월' 부분)을 클릭하면 됩니다. | +| 6 | 선택 가능한 교시 그룹 목록을 단축 이름을 사용하여 나타냅니다. 클릭하여 교시 그룹을 변경할 수 있습니다. | + +이석 확인 기능을 사용하면, 해당 `학습실` 학생들의 `기준 시각` 및 `교시 그룹`에 해당하는 최종 승인 상태의 이석들을 볼 수 있습니다. 가령, `주간 교시 그룹`에 해당하는 3\~7 교시의 최종 승인된 이석을 가진 학생의 자리에는 아래와 같이 표시됩니다. + +![이석 확인 화면 예시 이미지](<../.gitbook/assets/image (3).png>) + +같은 교시에 두 이석이 존재하는 경우, 종료되지 않았으며 `기준 시각`에 시작 시각이 가까운 이석이 먼저 표시됩니다. 야간 교시 그룹의 1교시가 19시 10분부터 20시 10분까지인 경우를 예로 들어보겠습니다. 19시 10분부터 19시 30분까지의 종류가 '이석'인(화면에 '이'라고 표시되는) 이석 1이, 19시 30분부터 20시 10분까지의 종류가 '컴퓨터'인(화면에 '컴'이라고 표시되는) 이석 2가 최종 승인 상태라면, 아래와 같은 원리에 의해 19시 30분 전에는 (이)로, 19시 30분과 19시 30분 후에는 (컴)으로 표시됩니다. + +![같은 교시에 2개의 이석이 존재하는 경우 화면 표시 원리 설명도](<../.gitbook/assets/image (8).png>) + +이석 확인 화면에서 표시 가능한 교시의 수는 정해져있습니다. 이는 관리자에 의해 변경될 수 있으며, 자세한 내용은 관리자 기능 > 전역설정 을 참조하시기 바랍니다. + +교시 그룹에 속해있는 교시들의 수가 표시 가능한 교시의 수를 초과했을 때 교시 선택 슬라이더가 나타나게 됩니다. 이 슬라이더를 조종하면 화면에 표시되는 교시들을 변경할 수 있습니다. + +![이석 확인 교시 슬라이더](<../.gitbook/assets/image (4).png>) + +또한 해당 `학습실`의 자리배치도에 문제가 있어 학생의 정보를 표시할 수 없는 경우 아래와 같이 자리에 해당하는 칸의 배경 색상이 붉은색으로 변경됩니다. 이 경우 관리자에게 문의하여 정보 갱신을 요청하십시오. + +![자리 배치도 오류](<../.gitbook/assets/image (5).png>) + +좌석을 짧게 클릭하면 해당 좌석에 표시를 남길 수 있습니다. 자습 감독 시에 자리에 없는 학생을 표시하거나 이상이 있는 좌석을 표시하는 용도로 사용될 수 있습니다. 첫 클릭 시 좌석의 배경색이 바뀌며, 다시 클릭하면 원래대로 돌아옵니다. + +![좌석 선택 기능 예시](<../.gitbook/assets/image (9).png>) + +### 학생 상세 정보 + +학생의 좌석을 두 번 연속으로 클릭하면 해당 학생의 상세 정보와 최근 7일의 이석을 조회할 수 있습니다. 이석 승인 상태 변경 권한을 가진 사용자로 로그인이 되어있는 경우, "승인 여부" 란에 표시된 승인 상태 정보를 클릭하면 해당 이석의 승인 상태를 변경할 수 있습니다. + +![학생 상세 정보 팝업 예시](<../.gitbook/assets/image (10).png>) diff --git a/basic-functionalities/manage.md b/basic-functionalities/manage.md new file mode 100644 index 0000000..fd9d976 --- /dev/null +++ b/basic-functionalities/manage.md @@ -0,0 +1,50 @@ +--- +description: 이석 관리 기능에 대한 설명입니다. +--- + +# 이석 관리 + +### 이석 관리 페이지 + +아래는 이석 관리 페이지의 기본 화면입니다. + +![](../.gitbook/assets/그림2.png) + +| 번호 | 설명 | +| -- | ------------------------------------------------------------------------ | +| 1 | 이석 구분, 지도교사 이름, 이석 장소를 한눈에 볼 수 있는 패널입니다. 각 항목을 클릭하여 이석들을 필터링하여 볼 수 있습니다. | +| 2 | 한 페이지에 보여줄 이석의 개수를 조절할 수 있습니다. | +| 3 | 이석에 기재된 정보를 바탕으로 이석을 검색할 수 있습니다. | +| 4 | 현재 페이지를 기준으로 1부터 부여하는 이석의 번호입니다. (이석의 고유번호는 아닙니다.) | +| 5 | 이석의 기본 기재 정보입니다. | +| 6 | 이석 승인여부입니다. | + +### 이석 승인 여부 + +각 이석은 `승인여부`를 가집니다. 승인여부는 1단계\~5단계로 구분되며 `전역설정`에서 각 이석의 최종 승인에 필요한 단계 수를 조절할 수 있습니다. + +만약 3단계의 절차로 이석을 승인하도록 `전역설정`에서 설정하였다면, 이석이 가질 수 있는 이석 상태와 그에 해당하는 승인여부 표시는 아래와 같습니다. + +![3단계 승인 절차를 가지는 이석이 가질 수 있는 이석 상태와 이에 따른 승인여부 표시 방법](<../.gitbook/assets/image (19).png>) + +### 이석 승인 및 거절하기 + +이석을 승인하거나 거절할 권한을 가지고 있는 모든 역할의 사용자들은 승인여부 표시를 클릭할 경우 아래와 같은 창이 표시됩니다. + +![승인여부 표시 클릭 시 나타나는 창](<../.gitbook/assets/image (20).png>) + +만약 `전역설정`에서 2단계 승인 절차를 설정했다면, 각 이석 상태에서 버튼을 클릭했을 때 변화할 수 있는 이석 상태의 경우의 수는 아래와 같습니다. + +![각 이석 상태에서 버튼을 클릭했을 때 변화할 수 있는 이석 상태의 경우의 수](<../.gitbook/assets/image (23).png>) + +### 이석 상태 변경 권한 + +이석찬의 사용자는 `역할`에 속하며 각 `역할`에는 이석 상태의 변경 권한이 주어집니다. `역할`은 각 단계의 이석 상태 변경 권한을 동시에 가질 수 있습니다. 예를 들어, 1단계 및 3단계의 이석 상태 변경 권한이 주어진 `역할`에 속한 사용자의 경우, 1단계만 승인된 이석을 승인하거나 거절할 수 없습니다. 이석 상태의 단계는 중요 순위가 없으며, 상위 단계의 권한이 하위 단계의 권한을 상속하지 않습니다. 따라서, 3단계의 권한만을 가지고 있는 사용자는 1,2 단계의 권한을 변경할 수 없습니다. + +이석 상태 변경 권한을 가진 사용자는 아래와 같은 버튼을 클릭하여 선택된 모든 이석을 자신이 변경할 수 있는 최대 단계로 승인('선택된 이석 승인' 버튼)하거나 선택된 모든 이석을 삭제할 수 있습니다('선택된 이석 삭제' 버튼). + +![선택된 이석 승인 및 삭제 버튼](<../.gitbook/assets/image (22).png>) + +예를 들어, 3단계 승인 절차를 가지는 상황에서 1,3 단계의 승인 권한을 가지는 A와 2단계의 승인 권한을 가지는 B가 있다고 가정해보겠습니다.현재 어떤 단계도 승인되거나 거절되지 않은 미승인 상태의 이석을 A가 최대 단계로 승인하고자 한다면, A는 2단계의 승인 권한을 가지고 있지 않으므로 1단계가 변경할 수 있는 최대 단계가 됩니다. 그러나 만약, 1,2 단계가 모두 승인된 상태의 이석을 A가 최대 단계로 승인하고자 한다면 이 이석은 3단계로 승인이 될 것입니다. 반대로, 미승인 상태의 이석을 B가 최대 단계로 승인하고자 한다면 이석의 승인 상태는 변하지 않으며, 1단계만 승인 상태인 이석을 B가 최대 단계로 승인하고자 한다면 2단계 승인 상태의 이석이 될 것 입니다. + + diff --git a/basic-functionalities/overview.md b/basic-functionalities/overview.md new file mode 100644 index 0000000..3fb5896 --- /dev/null +++ b/basic-functionalities/overview.md @@ -0,0 +1,21 @@ +--- +description: 이석찬 기본 기능에 대한 개요입니다. +--- + +# 개요 + +이석찬은 `이석`을 기본 단위로 하여 작동합니다. 하나의 `이석`은 아래와 같은 정보를 포함하고 있습니다. + +| 정보 이름 | 설명 | +| ----- | ----------------- | +| 이석종류 | 이석의 종류입니다. | +| 지도교사 | 이석을 지도하는 지도교사입니다. | +| 참여학생 | 이석에 참여하는 학생들입니다. | +| 이석장소 | 이석이 이루어지는 장소입니다. | +| 이석사유 | 이석 사유입니다. | +| 시작시각 | 이석이 시작하는 시각입니다. | +| 종료시각 | 이석이 종료되는 시작입니다. | +| 승인상태 | 이석의 승인 상태입니다. | +| 생성시각 | 이석이 생성된 시각입니다. | +| 수정시각 | 이석이 수정된 시각입니다. | +| 삭제시각 | 이석이 삭제된 시각입니다. | diff --git a/main/access.md b/main/access.md new file mode 100644 index 0000000..6ef19af --- /dev/null +++ b/main/access.md @@ -0,0 +1,21 @@ +--- +description: 이석찬 접속 방법입니다. +--- + +# 사이트 접속 방법 + +아래는 언제든지 접속 가능한 이석찬의 고정 주소입니다. + +1. [https://이석찬.com](https://xn--3i4bz9iu8d.com) +2. [https://iseokchan.com](https://iseokchan.com) +3. [https://www.이석찬.com](https://www.xn--3i4bz9iu8d.com) +4. [https://www.iseokchan.com](https://www.iseokchan.com) + +아래는 이석찬으로 리디렉션되는 주소입니다. 해당 주소는 상황에 따라 접속이 되지 않을 수 있습니다. 되도록 고정주소를 이용하시기 바랍니다. + +1. [http://이석찬.레전드.com](http://xn--3i4bz9iu8d.xn--hy1b43d01t.com) +2. [http://이석찬.공주님.com](http://xn--3i4bz9iu8d.xn--ob0br5i2xv.com) + +{% hint style="info" %} + 이석찬은 Chrome에 최적화되어있습니다. Internet Explorer 이용 시 일부 기능이 제대로 작동하지 않을 수 있습니다. +{% endhint %} diff --git a/main/installation.md b/main/installation.md new file mode 100644 index 0000000..b49d6d7 --- /dev/null +++ b/main/installation.md @@ -0,0 +1,92 @@ +--- +description: 이석찬을 Ubuntu 서버에 설치하는 방법에 대해 다룹니다. +--- + +# 이석찬 설치하기 + +## 서버 사양 확인하기 + +이석찬을 사용하기 위해서는 Linux 기반의 서버가 필요합니다. 이 문서에서는 Ubuntu/Apache2를 기준으로 설명합니다. + +## 아파치 설치하기 + +```bash +$ sudo apt install apache2 +``` + +## Mysql 설치하기 + +```bash +$ sudo apt install mysql-server +``` + +## PHP 설치하기 + +이석찬은 PHP 8.0 이상 버전에서 작동합니다. + +### PHP 및 아파치 PHP 모듈 설치 + +```bash +$ sudo apt install php8.0 libapache2-mod-php +``` + +### PHP 익스텐션 설치 + +CodeIgniter 4를 위한 PHP 익스텐션을 설치합니다. CodeIgniter 4 실행을 위한 PHP 익스텐션의 종류는 다음 링크에서 확인할 수 있습니다([https://github.com/codeigniter4/CodeIgniter4](https://github.com/codeigniter4/CodeIgniter4)). + +```bash +$ sudo apt install php8.0-intl php8.0-mbstring php8.0-mysqlnd php8.0-curl +$ sudo a2enmod intl +$ sudo a2enmod mbstring +$ sudo a2enmod mysqlnd +$ sudo a2enmod curl +``` + +## CodeIgniter 4 설치 + +본 매뉴얼에서는 CodeIgniter 4를 설치하는 방법 중 Composer를 이용한 설치만을 다룹니다. 다른 설치 방법에 대해서는 CodeIgniter4 매뉴얼([https://codeigniter.com/user\_guide/index.html](https://codeigniter.com/user\_guide/index.html))의 Installation 항목을 참조하십시오. + +### Composer 설치 + +Composer를 PHP 8.0 이상 버전에서 정상적으로 사용하기 위하여서는 Composer 2 이상의 버전을 설치하여야 합니다. 이석찬 레포지토리에는 최신 버전의 Composer를 설치하기 위한 쉘 스크립트(install\_composer.sh)가 내장되어 있습니다. 아래를 실행하여 Composer를 설치할 수 있습니다. + +```bash +$ sudo sh install_composer.sh +$ sudo mv composer.phar /usr/bin/composer +``` + +### CodeIgniter 4 및 라이브러리 설치 + +Composer를 통해 CodeIgniter 4 및 이석찬 실행을 위한 기타 라이브러리를 설치합니다. + +```bash +$ composer install +``` + +{% hint style="info" %} +`composer install` 명령어 실행 도중, 필요한 PHP 익스텐션이 설치가 되지 않아 오류가 발생할 수 있습니다. 이 경우 [PHP 익스텐션 설치](installation.md#php-1) 항목을 참고하여 누락된 익스텐션을 설치해야 합니다. +{% endhint %} + +## 환경 변수 설정하기 + +이석찬 내부에서 사용되는 환경 변수를 설정할 수 있습니다. 환경 변수 파일은 `.env`파일이며, 레포지토리에 첨부되어 있는 `env`파일을 복사하여 생성하면 됩니다. + +## 서버 시동하기 + +Apache 2 및 MySQL를 실행합니다. + +``` +$ sudo serivce apache2 start +$ sudo service mysql start +``` + +## 이석찬 설치하기 + +### 설치 관리자 접속하기 + +### 데이터베이스 설치하기 + +### 전역설정 지정하기 + +### 기본 계정 생성하기 + diff --git a/main/main/README.md b/main/main/README.md new file mode 100644 index 0000000..0a4b7b9 --- /dev/null +++ b/main/main/README.md @@ -0,0 +1,9 @@ +--- +description: 이석찬의 메인 화면에 대한 안내입니다. +--- + +# 메인화면 + +![](<../../.gitbook/assets/image (17).png>) + +다음은 이석찬의 기본 메인화면입니다. diff --git a/main/main/image-lisence.md b/main/main/image-lisence.md new file mode 100644 index 0000000..7bdd5a0 --- /dev/null +++ b/main/main/image-lisence.md @@ -0,0 +1,14 @@ +--- +description: 메인화면 좌측 하단 저작권 표시에 대한 안내입니다. +--- + +# 이미지 저작권 표시 + +이석찬의 사진 제보 기능에 의해 관리자에게 제공된 이미지는 CC BY-NC-ND 라이선스를 따릅니다. 이에 따라 이석찬에서는 사진의 CCL을 고지하고 있습니다. + +![CC BY-NC-ND 라이선스](../../.gitbook/assets/byncnd.jpg) + +{% hint style="info" %} +CC BY-NC-ND 라이선스는 저작자와 출처를 표시하면 자유이용을 허락하되, 영리적 목적 이용과 2차적 저작물의 작성은 허용하지 않는 라이선스를 의미합니다. +{% endhint %} + diff --git a/main/main/privacy_policy.md b/main/main/privacy_policy.md new file mode 100644 index 0000000..c3aad0e --- /dev/null +++ b/main/main/privacy_policy.md @@ -0,0 +1,3 @@ +# 개인정보처리방침 + +이석찬은 개인정보보호법에 따라 이용자의 개인정보 및 권익을 보호하고 개인정보와 관련한 이용자의 고충을 원할하게 처리하고자 개인정보처리방침을 두고 있습니다. diff --git a/main/main/submit-image.md b/main/main/submit-image.md new file mode 100644 index 0000000..e0adde2 --- /dev/null +++ b/main/main/submit-image.md @@ -0,0 +1,13 @@ +--- +description: 이석찬 우측 하단 아래에 존재하는 사진 제출 기능에 대해 설명합니다. +--- + +# 사진 제출 + +![사진 제출 기능 / 2019.11.09.](../../.gitbook/assets/사진제보.png) + +이석찬에서는 메인 화면 사진 수집을 위해 사진 제 채널을 운영하고 있습니다. 이 채널은 구글 설문지와 같은 기타 서비스를 이용할 수도 있습니다. 제출자 이름이 명시되지 않은 사진이나 부적절한 사진은 반영되지 않을 수 있습니다. + +{% hint style="warning" %} +사진 제출 채널을 통해 사진을 제출하면 CC BY-NC-ND 라이선스에 의해 자신의 사진이 이석찬 홈페이지에 게시되는 것을 동의하는 것입니다. CC BY-NC-ND 라이선스에 대해서는 [이미지 저작권 표시](image-lisence.md)를 참고하시기 바랍니다. +{% endhint %} diff --git a/main/main/submit-opinion.md b/main/main/submit-opinion.md new file mode 100644 index 0000000..c23f59e --- /dev/null +++ b/main/main/submit-opinion.md @@ -0,0 +1,9 @@ +--- +description: 이석찬 우측 하단 아래에 존재하는 의견 제출 기능에 대해 설명합니다. +--- + +# 의견 제출 + +![의견 제출 기능 / 2019.11.09.](../../.gitbook/assets/의견제출.png) + +이석찬에서는 사용자의 의견을 수렴하기 위하여 의견 제출 채널을 운영하고 있습니다. 이 채널은 구글 설문지와 같은 기타 서비스를 이용할 수도 있습니다. 제출자 이름이 명시되지 않은 의견이나 불필요한 의견은 반영되지 않을 수 있습니다. diff --git a/main/main/undefined.md b/main/main/undefined.md new file mode 100644 index 0000000..fb0676e --- /dev/null +++ b/main/main/undefined.md @@ -0,0 +1,11 @@ +--- +description: 메인화면 우측 하단 서비스 저작권 표시에 대한 안내입니다. +--- + +# 서비스 저작권 표시 + +이석찬 웹사이트는 아래 개발자 및 디자이너에 의해 개발되었으며 이는 대한민국 저작권 보호법에 의해 보호받는 저작물입니다. 이에 따라 아래와 같 원저작자를 표시하고 있습니다. + +{% hint style="info" %} +2018-2019 KSHS Pointer 26th. All Rights Reserved. +{% endhint %} diff --git a/undefined/undefined-1.md b/undefined/undefined-1.md new file mode 100644 index 0000000..840604a --- /dev/null +++ b/undefined/undefined-1.md @@ -0,0 +1,203 @@ +--- +description: 사이트에 전반적으로 적용되는 전역설정에 대해 안내합니다 +--- + +# 전역설정 + +## 개요 + +이석찬의 관리자는 사이트에 대한 전반적인 사항을 전역설정을 통해 지정할 수 있습니다. 이 개념은 학생 및 교사를 추가하거나 학생의 좌석을 배정하는 것과는 다릅니다. 전역 설정을 다루기전에, 알고 가야할 것들이 있습니다. 아래 내용은 전역설정에 대해 이해하는 데 있어 도움을 줍니다. + +### 구성 + +아래 문서는 다음과 같이 구성되어있습니다. 아래 예시를 참고하십시오. + +> #### 변수 이름 | 변수 타입 +> +> 변수 설명 + +조금 더 실질적인 예시는 아래와 같습니다. + +> #### SCHOOL\_NAME | STRING +> +> 학교의 이름을 지정합니다. + +위와 같은 경우 이석찬의 관리자 패널에서 SCHOOL\_NAME 값을 "한국고등학교" 라고 지정할 경우 사이트 내에서 사용되는 모든 학교 이름에 관한 값이 "한국고등학교"로 변경됩니다. + +### 변수 타입 + +위의 구성 문서에서 변수 타입이 있습니다. 변수 타입은 해당 변수가 어떠한 값을 가져야 하는지 알려줍니다. 이에 관한 내용은 아래에 열거되어있습니다. + +`STRING : 문자열`\ +`INT : 정수`\ +`BOOL : 논리형(0 또는 1)`\ +`ARRAY<타입> : 타입 값의 배열`\ +`HTML : HTML 문서`\ +`REGEX : 정규식` + +{% hint style="warning" %} +이석찬 관리자 패널에서는 입력되는 값에 대해 별도의 제한을 두지 않습니다. 즉, 변수 타입이 달라도 값을 삽입할 수는 있으나 이는 사이트에 심각한 영향을 줄 수 있습니다. 심지어, 사이트가 구동되지 않을 수 있습니다. 더욱이, 일부 변수는 최솟값 또는 최댓값이 제한되거나 특정한 조건이 있는 경우가 있습니다. 따라서 변수를 삽입하는데에 있어 반드시 문서를 참조하시기 바랍니다. +{% endhint %} + +## 전역설정 + +### 네이밍 + +#### SITE\_FULL\_NAME | STRING + +사이트의 전체 이름입니다. 예를 들어 `이석찬::강원과고 통합 이석관리 플랫폼`을 사이트 전체 이름으로 활용할 수 있습니다. + +#### SITE\_SHORT\_NAME | STRING + +사이트의 짧은 이름입니다. 대개 웹 브라우저 상단에 사이트 이름이 표시됩니다. 예를 들어 `이석찬`을 사이트 짧은 이름으로 사용할 수 있습니다. + +#### MENU\_APPLY\_NAME | STRING + +이석 신청 메뉴의 호칭입니다. 예를 들어 `이석 신청`을 이석 신청 메뉴의 호칭으로 사용할 수 있고, 이는 메인화면 메뉴 이름과 내비게이션 바, 해당 페이지의 제목으로 사용됩니다. + +#### MENU\_CHECK\_NAME | STRING + +이석 확인 메뉴의 호칭입니다. 예를 들어 `이석 확인`을 이석 확인 메뉴의 호칭으로 사용할 수 있고, 이는 메인화면 메뉴 이름과 내비게이션 바, 해당 페이지의 제목으로 사용됩니다. + +#### MENU\_MANAGE\_NAME | STRING + +이석 신청 메뉴의 호칭입니다. 예를 들어 `이석 관리`를 이석 관리 메뉴의 호칭으로 사용할 수 있고, 이는 메인화면 메뉴 이름과 내비게이션 바, 해당 페이지의 제목으로 사용됩니다. + +#### ISEOK\_NAME | STRING + +이석의 호칭입니다. `이석`,`자율학습` 등으로 사용할 수 있습니다. + +### 제한 + +#### MAXIMUM\_GRADE | INT + +학생이 속할 수 있는 학년의 최댓값입니다. + +#### MINIMUM\_GRADE | INT + +학생이 속할 수 있는 학년의 최솟값입니다. + +#### MAXIMUM\_CLASS | INT + +학생이 속할 수 있는 반의 최댓값입니다. + +#### MINIMUM\_CLASS | INT + +학생이 속할 수 있는 반의 최솟값입니다. + +#### MAXIMUM\_NUMBER | INT + +학생이 속할 수 있는 번호의 최댓값입니다. + +#### MINIMUM\_NUMBER | INT + +학생이 속할 수 있는 번호의 최솟값입니다. + +#### ISEOK\_APPROVE\_STEP | INT + +이석 신청을 위해 거쳐야 할 단게입니다. 최솟값은 1, 최댓값은 5입니다. + +### 리소스 + +#### SRC\_ICON\_MAIN | STRING + +메인 아이콘의 경로입니다. + +#### SRC\_ICON\_MENU\_APPLY | STRING + +이석 신청 메뉴의 아이콘 경로입니다. + +#### SRC\_ICON\_MENU\_CHECK | STRING + +이석 확인 메뉴의 아이콘 경로입니다. + +#### SRC\_ICON\_MENU\_MANAGE | STRING + +이석 관리 메뉴의 아이콘 경로입니다. + +#### SRC\_BACKGROUND\_IMAGE | ARRAY\ + +메인화면 배경 경로입니다. 여러 개인 경우 랜덤으로 한 이미지가 출력됩니다. + +### 코드 + +#### HTML\_TERMS\_OF\_SERVICE | HTML + +사이트 이용약관 삽입될 HTML 코드입니다. + +#### HTML\_PRIVACY\_POLICY | HTML + +개인정보 처리 방침에 삽입될 HTML 코드입니다. + +### 비트 플래그 + +#### FLAG\_TEACHER\_NICKNAME | INT + +교사 이름을 출력하기 위한 방식을 지정합니다. 동명이인을 방지하기 위함입니다. 상세한 내용은 아래를 참고하십시오. 교사 닉네임은 표현식 `EXPR_TEACHER_NICKNAME`을 이용하여 출력된 값을 의미합니다. + +```c +// 001 (1) : 교사 닉네임을 출력하지 않음 (FLAG_TEACHER_NICKNAME_NO) +// 010 (2) : 동명이인이 있는 경우에만 교사 닉네임을 출력함 (FLAG_TEACHER_NICKNAME_NAMESAKE) +// 100 (4) : 항상 교사 닉네임을 출력함 (FLAG_TEACHER_NICKNAME_ALWAYS) +``` + +### 표현식 + +#### EXPR\_TEACHER\_NICKNAME | STRING + +교사 이름을 출력하는 표현식입니다. 동명이인 방지를 위함입니다. 사용할 수 있는 변수는 아래와 같습니다. + +`{name} {nickname} {room_alias} {room_short_alias}` + +`{교사 이름} {교사 별명} {교사 사무실 이름} {교사 짧은 이름}` + +#### EXPR\_COMPUTER\_INFO\_{GRADE\_NUM} | STRING + +**{GRADE\_NUM}** 학년의 컴퓨터 정보를 계산하는 수학식입니다. 사용할 수 있는 변수는 아래와 같습니다. + +`{grade} {year} {month} {day} {hour} {minute} {second} {dayOfWeek} {dayOfYear} {weekOfMonth} {weekOfYear} {timestamp} {quarter} {MAXIMUM_GRADE} {MINIMUM_GRADE} {MAXIMUM_CLASS} {MINIMUM_CLASS} {MAXIMUM_NUMBER} {MINIMUM_NUMBER}` + +`{학년} {연도} {달} {날짜(달 기준)} {시간} {분} {초} {요일(주 기준)} {날짜(연도 기준)} {주 수(달 기준)} {주 수(연도 기준)} {UNIX 타임스탬프} {분기} {MAXIMUM_GRADE 전역설정} {MINIMUM_GRADE 전역설정} {MAXIMUM_CLASS 전역설정} {MINIMUM_CLASS 전역설정} {MAXIMUM_NUMBER 전역설정} {MINIMUM_NUMBER 전역설정}` + +### 보안 + +#### EXPR\_TEACHER\_NICKNAME | STRING + +교사 이름을 출력하는 표현식입니다. 동명이인 방지를 위함입니다. 사용할 수 있는 변수는 아래와 같습니다. + +`{name} {nickname} {room_alias} {room_short_alias}` + +**API\_CORS\_DOMAIN | ARRAY\** + +이석찬은 독립적인 API 서버를 가지고 있습니다. 이 경우에 웹 브라우저에서 API 서버에 요청을 하면(예-이석신청) CORS(Cross-Origin Resource Sharing) 오류가 발생할 수 있습니다. 이 경우에 요청하는 클라이언트의 도메인을 추가하면 서버에서 도메인을 인식하여 CORS 관련 헤더를 보냅니다. 이 설정은 CSRF 설정과 무관합니다. + +**ALLOW\_FROM\_ALL | BOOL** + +이석찬에 대한 접속을 모든 호스트로부터 허용할 지 여부를 결정합니다. 이 값이 참이면 모든 호스트로부터 이석찬 접속이 가능해집니다. + +{% hint style="warning" %} +이 값이 거짓일 경우 이석찬 메인 페이지 뿐만 아니라 API 서버에 대한 접근도 불가해집니다. 이 경우에는 API 서버에 접근하려는 호스트의 IP주소를 아래 ALLOW\_IP\_ADDRESS에 추가해야합니다. +{% endhint %} + +**ALLOW\_IP\_ADDRESS | ARRAY\** + +이석찬에 대한 접근을 허용하려는 호스트의 IP 주소를 정규식으로 나타낸 리스트입니다. 만약 IP 주소가 `100.22.33.1` 인 호스트의 접근을 허용하려면 `^100.22.33.1$` 을, IP 주소의 범위가 `100.22.33.1~100.22.33.99` 인 호스트의 접근을 허용하려면 `^100.22.33.([1-9]|[1-9]\d)$` 을 입력하면됩니다. IP 주소 범위를 정규식으로 바꾸는 방법은 아래 사이트를 참고하십시오. + +{% embed url="https://www.analyticsmarket.com/freetools/ipregex/" %} + +**DENY\_IP\_ADDRESS | ARRAY\** + +이석찬에 대한 접근을 거부하려는 호스트의 IP 주소를 정규식으로 나타낸 리스트입니다. 만약 IP 주소가 `100.22.33.1` 인 호스트의 접근을 거부하려면 `^100.22.33.1$` 을, IP 주소의 범위가 `100.22.33.1~100.22.33.99` 인 호스트의 접근을 거부하려면 `^100.22.33.([1-9]|[1-9]\d)$` 을 입력하면됩니다. IP 주소 범위를 정규식으로 바꾸는 방법은 아래 사이트를 참고하십시오. + +{% embed url="https://www.analyticsmarket.com/freetools/ipregex/" %} + +{% hint style="warning" %} +접근 거부는 다른 그 어떤 조건에에 우선합니다. 따라서, ALLOW\_IP\_ADDRESS에 있는 IP이더라도 DENY\_IP\_ADDRESS에 있는 경우 접근이 제한됩니다. 더불어, 로그인이 된 상태여도 DENY\_IP\_ADDRESS에 있는 경우 접근이 제한됩니다. +{% endhint %} + +### 권한 + +**PERMISSION\_APPLY | INTEGER** + +이석 접근 + diff --git a/undefined/undefined.md b/undefined/undefined.md new file mode 100644 index 0000000..af43677 --- /dev/null +++ b/undefined/undefined.md @@ -0,0 +1,17 @@ +--- +description: 관리자 가이드에 대한 개요입니다. +--- + +# 개요 + +이석찬의 관리자는 사이트의 전반적인 내용을 추가, 변경 및 삭제할 수 있습니다. 이 가이드에서는 관리자가 어떻게 이석찬의 핵심 또는 부가내용을 변경할 수 있는지에 대해 다룹니다. + + + +아래 내용은 이석찬에서 내부적으로 처리되는 로직을 설명한 것입니다. 숙지하시기 바랍니다. + +1. 권한 \ + + + 이석찬의 권한은 1 이상인 정수로 이루어져 있습니다. 권한의 상한은 정수형 값의 상한(대략 20억)이며, 관리자는 어떤 작업을 수행하기 위한 최소 권한을 지정할 수 있습니다. 이석찬의 권한 체계에서, 상위 권한은 하위 권한을 포함하며 일부 권한의 경우 이를 해 +