(private_pages)= # 비공개 페이지 페이지에 대한 게시 권한이 있는 사용자는 페이지 탐색기 또는 편집 인터페이스의 오른쪽 상단에 있는 '개인 정보' 컨트롤을 클릭하여 페이지를 비공개로 설정할 수 있습니다. 이는 페이지 및 하위 페이지를 볼 수 있는 사람을 제한합니다. 여러 가지 유형의 제한을 사용할 수 있습니다. - **로그인한 모든 사용자에게 액세스 가능:** 사용자는 페이지를 보려면 로그인해야 합니다. 모든 사용자 계정은 권한 수준에 관계없이 액세스 권한이 부여됩니다. - **공유 비밀번호로 액세스 가능:** 사용자는 페이지를 보려면 주어진 공유 비밀번호를 입력해야 합니다. 이는 신뢰할 수 있는 그룹의 사람들과 페이지를 공유하고 싶지만 개별 사용자 계정을 제공하는 것이 과도할 때 적합합니다. 동일한 비밀번호가 모든 사용자 간에 공유되며, 이는 사이트에 존재하는 사용자 계정과 독립적으로 작동합니다. - **특정 그룹의 사용자에게 액세스 가능:** 사용자는 페이지를 보려면 로그인해야 하며, 지정된 그룹 중 하나 이상의 구성원이어야 합니다. ```{warning} 공유 비밀번호는 모든 사용자 간에 공유되고 데이터베이스에 일반 텍스트로 저장되므로 민감한 콘텐츠를 보호하는 데 사용해서는 안 됩니다. 가능한 경우, 사용자가 비공개 페이지 콘텐츠에 액세스하려면 로그인하도록 요구하는 것이 좋습니다. ``` You can disable shared password for pages using `WAGTAIL_PRIVATE_PAGE_OPTIONS`. ```python WAGTAIL_PRIVATE_PAGE_OPTIONS = {"SHARED_PASSWORD": False} ``` Any existing shared password usage will remain active but will not be viewable by the user within the admin, these can be removed in the Django shell as follows. ```py from wagtail.models import Page for page in Page.objects.private(): page.get_view_restrictions().filter(restriction_type='password').delete() ``` (private_collections)= ## 비공개 컬렉션 (문서 제한) 마찬가지로, 문서는 적절한 개인 정보 설정이 있는 컬렉션에 배치하여 비공개로 만들 수 있습니다(참조: [](image_document_permissions)). You can also disable shared password for collections (which will impact document links) using `WAGTAILDOCS_PRIVATE_COLLECTION_OPTIONS`. ```python WAGTAILDOCS_PRIVATE_COLLECTION_OPTIONS = {"SHARED_PASSWORD": False} ``` Any existing shared password usage will remain active but will not be viewable within the admin, these can be removed in the Django shell as follows. ```py from wagtail.models import Collection for collection in Collection.objects.all(): collection.get_view_restrictions().filter(restriction_type='password').delete() ``` (login_page)= ## 로그인 페이지 설정 비공개 페이지 및 컬렉션(문서 제한)은 Wagtail에서 기본적으로 작동합니다. 사이트 구현자는 이를 설정하기 위해 아무것도 할 필요가 없습니다. 그러나 기본 "로그인" 및 "비밀번호 필요" 폼은 단순한 HTML 페이지에 불과하며, 사이트 구현자는 이를 자신의 사이트 디자인에 맞게 사용자 지정된 페이지로 바꾸고 싶을 수 있습니다. 기본 로그인 페이지는 `WAGTAIL_FRONTEND_LOGIN_TEMPLATE` 을 사용할 템플릿의 경로로 설정하여 사용자 지정할 수 있습니다. ```python WAGTAIL_FRONTEND_LOGIN_TEMPLATE = 'myapp/login.html' ``` Wagtail은 여기서 Django의 표준 `django.contrib.auth.views.LoginView` 뷰를 사용하므로, 템플릿에서 사용할 수 있는 컨텍스트 변수는 [Django의 로그인 뷰 문서](django.contrib.auth.views.LoginView)에 자세히 설명되어 있습니다. 기본 Django 로그인 뷰가 적합하지 않은 경우(예: 외부 인증 시스템을 사용하거나 Wagtail을 이미 작동하는 로그인 뷰가 있는 기존 Django 사이트에 통합하는 경우) `WAGTAIL_FRONTEND_LOGIN_URL` 설정을 통해 로그인 뷰의 URL을 지정할 수 있습니다. ```python WAGTAIL_FRONTEND_LOGIN_URL = '/accounts/login/' ``` 기존 로그인 메커니즘이 있는 Django 사이트에 Wagtail을 통합하려면 `WAGTAIL_FRONTEND_LOGIN_URL = LOGIN_URL` 로 설정하는 것으로 일반적으로 충분합니다. (set_default_page_privacy)= ## 기본 개인 정보 제한 설정 페이지의 `get_default_privacy_setting` 메서드를 재정의하여 페이지의 기본 개인 정보 제한을 수정할 수 있습니다. 이는 페이지 유형이 기본적으로 로그인을 요구하도록 설정하는 데 사용할 수 있지만, 사용자 기반으로 기본 개인 정보 설정을 조정하거나 자동 생성된 공유 비밀번호를 사용하는 것과 같은 더 복잡한 구성에도 사용할 수 있습니다. 메서드는 최소한 `type` 키를 포함하는 사전을 반환해야 합니다. 값은 {class}`~wagtail.models.PageViewRestriction` 의 {attr}`~wagtail.models.PageViewRestriction.restriction_type` 에 대한 다음 값 중 하나여야 합니다. - `BaseViewRestriction.NONE` - 제한 없음 - `BaseViewRestriction.PASSWORD` - 비밀번호 보호 (사전에 추가 `password` 키 필요) - `BaseViewRestriction.GROUPS` - 그룹 제한 (그룹 객체 목록이 있는 추가 `groups` 키 필요) - `BaseViewRestriction.LOGIN` - 로그인 필요 ```python class BlogPage(Page): #... def get_default_privacy_setting(self, request): # 기본값을 그룹으로 설정 from django.contrib.auth.models import Group from wagtail.models import BaseViewRestriction moderators = Group.objects.filter(name="Moderators").first() editors = Group.objects.filter(name="Editors").first() return {"type": BaseViewRestriction.GROUPS, "groups": [moderators,editors]} class SecretPage(Page): #... def get_default_privacy_setting(self, request): # 기본값을 자동 생성된 비밀번호로 설정 from django.utils.crypto import get_random_string from wagtail.models import BaseViewRestriction return {"type": BaseViewRestriction.PASSWORD, "password": django.utils.crypto.get_random_string(length=32)} ``` ## 전역 "비밀번호 필요" 페이지 설정 Django 설정 파일에서 `WAGTAIL_PASSWORD_REQUIRED_TEMPLATE` 를 설정하여 사이트의 모든 "비밀번호 필요" 폼에 사용될 템플릿의 경로를 지정할 수 있습니다(특정 페이지 유형이 이를 재정의하는 경우는 제외 - 아래 참조). ```python WAGTAIL_PASSWORD_REQUIRED_TEMPLATE = 'myapp/password_required.html' ``` 이 템플릿은 차단된 페이지가 `get_context()` 를 통해 자체 템플릿에 전달하는 것과 동일한 컨텍스트 변수 세트(페이지 객체 자체를 참조하는 `page` 포함)와 다음 추가 변수(동일한 이름의 페이지 자체 컨텍스트 변수를 재정의함)를 받습니다. - **form** - 비밀번호 프롬프트에 대한 Django 폼 객체입니다. 이 객체는 `password` 라는 필드를 유일한 가시 필드로 포함합니다. 여러 숨겨진 필드도 존재할 수 있으므로, `form.as_p` 와 같은 Django의 렌더링 도우미 중 하나를 사용하지 않는 경우 페이지는 `form.hidden_fields` 를 반복해야 합니다. - **action_url** - 비밀번호 폼이 POST 요청으로 제출되어야 하는 URL입니다. `WAGTAIL_PASSWORD_REQUIRED_TEMPLATE` 로 사용하기에 적합한 기본 템플릿은 다음과 같습니다. ```html+django 비밀번호 필요

비밀번호 필요

이 페이지에 액세스하려면 비밀번호가 필요합니다. {% if user.is_authenticated %}계정이 있는 경우 로그인하여 진행하십시오.{% endif %}

{% csrf_token %} {{ form.non_field_errors }}
{{ form.password.errors }} {{ form.password.label_tag }} {{ form.password }}
{% for field in form.hidden_fields %} {{ field }} {% endfor %}
``` 문서에 대한 비밀번호 제한은 `WAGTAILDOCS_PASSWORD_REQUIRED_TEMPLATE` 설정을 통해 지정된 별도의 템플릿을 사용합니다. 이 템플릿은 위에서 설명한 `form` 및 `action_url` 컨텍스트 변수도 받습니다. ## 특정 페이지 유형에 대한 "비밀번호 필요" 페이지 설정 `password_required_template` 속성은 페이지 모델에 정의하여 해당 페이지 유형에 대해서만 "비밀번호 필요" 뷰에 대한 사용자 지정 템플릿을 사용할 수 있습니다. 예를 들어, 사이트에 설명과 함께 임베드된 비디오를 표시하는 페이지 유형이 있는 경우, 비디오 설명은 평소와 같이 표시하지만 비디오 임베드 대신 비밀번호 폼을 표시하는 사용자 지정 "비밀번호 필요" 템플릿을 사용할 수 있습니다. ```python class VideoPage(Page): ... password_required_template = 'video/password_required.html' ```