비공개 페이지¶
페이지에 대한 게시 권한이 있는 사용자는 페이지 탐색기 또는 편집 인터페이스의 오른쪽 상단에 있는 ‘개인 정보’ 컨트롤을 클릭하여 페이지를 비공개로 설정할 수 있습니다. 이는 페이지 및 하위 페이지를 볼 수 있는 사람을 제한합니다. 여러 가지 유형의 제한을 사용할 수 있습니다.
로그인한 모든 사용자에게 액세스 가능: 사용자는 페이지를 보려면 로그인해야 합니다. 모든 사용자 계정은 권한 수준에 관계없이 액세스 권한이 부여됩니다.
공유 비밀번호로 액세스 가능: 사용자는 페이지를 보려면 주어진 공유 비밀번호를 입력해야 합니다. 이는 신뢰할 수 있는 그룹의 사람들과 페이지를 공유하고 싶지만 개별 사용자 계정을 제공하는 것이 과도할 때 적합합니다. 동일한 비밀번호가 모든 사용자 간에 공유되며, 이는 사이트에 존재하는 사용자 계정과 독립적으로 작동합니다.
특정 그룹의 사용자에게 액세스 가능: 사용자는 페이지를 보려면 로그인해야 하며, 지정된 그룹 중 하나 이상의 구성원이어야 합니다.
경고
공유 비밀번호는 모든 사용자 간에 공유되고 데이터베이스에 일반 텍스트로 저장되므로 민감한 콘텐츠를 보호하는 데 사용해서는 안 됩니다. 가능한 경우, 사용자가 비공개 페이지 콘텐츠에 액세스하려면 로그인하도록 요구하는 것이 좋습니다.
You can disable shared password for pages using WAGTAIL_PRIVATE_PAGE_OPTIONS.
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.
from wagtail.models import Page
for page in Page.objects.private():
page.get_view_restrictions().filter(restriction_type='password').delete()
비공개 컬렉션 (문서 제한)¶
마찬가지로, 문서는 적절한 개인 정보 설정이 있는 컬렉션에 배치하여 비공개로 만들 수 있습니다(참조: 이미지 / 문서 권한).
You can also disable shared password for collections (which will impact document links) using WAGTAILDOCS_PRIVATE_COLLECTION_OPTIONS.
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.
from wagtail.models import Collection
for collection in Collection.objects.all():
collection.get_view_restrictions().filter(restriction_type='password').delete()
로그인 페이지 설정¶
비공개 페이지 및 컬렉션(문서 제한)은 Wagtail에서 기본적으로 작동합니다. 사이트 구현자는 이를 설정하기 위해 아무것도 할 필요가 없습니다.
그러나 기본 “로그인” 및 “비밀번호 필요” 폼은 단순한 HTML 페이지에 불과하며, 사이트 구현자는 이를 자신의 사이트 디자인에 맞게 사용자 지정된 페이지로 바꾸고 싶을 수 있습니다.
기본 로그인 페이지는 WAGTAIL_FRONTEND_LOGIN_TEMPLATE 을 사용할 템플릿의 경로로 설정하여 사용자 지정할 수 있습니다.
WAGTAIL_FRONTEND_LOGIN_TEMPLATE = 'myapp/login.html'
Wagtail은 여기서 Django의 표준 django.contrib.auth.views.LoginView 뷰를 사용하므로, 템플릿에서 사용할 수 있는 컨텍스트 변수는 Django의 로그인 뷰 문서에 자세히 설명되어 있습니다.
기본 Django 로그인 뷰가 적합하지 않은 경우(예: 외부 인증 시스템을 사용하거나 Wagtail을 이미 작동하는 로그인 뷰가 있는 기존 Django 사이트에 통합하는 경우) WAGTAIL_FRONTEND_LOGIN_URL 설정을 통해 로그인 뷰의 URL을 지정할 수 있습니다.
WAGTAIL_FRONTEND_LOGIN_URL = '/accounts/login/'
기존 로그인 메커니즘이 있는 Django 사이트에 Wagtail을 통합하려면 WAGTAIL_FRONTEND_LOGIN_URL = LOGIN_URL 로 설정하는 것으로 일반적으로 충분합니다.
기본 개인 정보 제한 설정¶
페이지의 get_default_privacy_setting 메서드를 재정의하여 페이지의 기본 개인 정보 제한을 수정할 수 있습니다. 이는 페이지 유형이 기본적으로 로그인을 요구하도록 설정하는 데 사용할 수 있지만, 사용자 기반으로 기본 개인 정보 설정을 조정하거나 자동 생성된 공유 비밀번호를 사용하는 것과 같은 더 복잡한 구성에도 사용할 수 있습니다.
메서드는 최소한 type 키를 포함하는 사전을 반환해야 합니다. 값은 PageViewRestriction 의 restriction_type 에 대한 다음 값 중 하나여야 합니다.
BaseViewRestriction.NONE- 제한 없음BaseViewRestriction.PASSWORD- 비밀번호 보호 (사전에 추가password키 필요)BaseViewRestriction.GROUPS- 그룹 제한 (그룹 객체 목록이 있는 추가groups키 필요)BaseViewRestriction.LOGIN- 로그인 필요
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 를 설정하여 사이트의 모든 “비밀번호 필요” 폼에 사용될 템플릿의 경로를 지정할 수 있습니다(특정 페이지 유형이 이를 재정의하는 경우는 제외 - 아래 참조).
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 로 사용하기에 적합한 기본 템플릿은 다음과 같습니다.
<!DOCTYPE HTML>
<html>
<head>
<title>비밀번호 필요</title>
</head>
<body>
<h1>비밀번호 필요</h1>
<p>
이 페이지에 액세스하려면 비밀번호가 필요합니다.
{% if user.is_authenticated %}계정이 있는 경우 로그인하여 진행하십시오.{% endif %}
</p>
<form action="{{ action_url }}" method="POST">
{% csrf_token %}
{{ form.non_field_errors }}
<div>
{{ form.password.errors }}
{{ form.password.label_tag }}
{{ form.password }}
</div>
{% for field in form.hidden_fields %}
{{ field }}
{% endfor %}
<input type="submit" value="계속" />
</form>
</body>
</html>
문서에 대한 비밀번호 제한은 WAGTAILDOCS_PASSWORD_REQUIRED_TEMPLATE 설정을 통해 지정된 별도의 템플릿을 사용합니다. 이 템플릿은 위에서 설명한 form 및 action_url 컨텍스트 변수도 받습니다.
특정 페이지 유형에 대한 “비밀번호 필요” 페이지 설정¶
password_required_template 속성은 페이지 모델에 정의하여 해당 페이지 유형에 대해서만 “비밀번호 필요” 뷰에 대한 사용자 지정 템플릿을 사용할 수 있습니다. 예를 들어, 사이트에 설명과 함께 임베드된 비디오를 표시하는 페이지 유형이 있는 경우, 비디오 설명은 평소와 같이 표시하지만 비디오 임베드 대신 비밀번호 폼을 표시하는 사용자 지정 “비밀번호 필요” 템플릿을 사용할 수 있습니다.
class VideoPage(Page):
...
password_required_template = 'video/password_required.html'