(permissions_overview)= # 권한 Wagtail은 중재 워크플로, 사이트의 다른 영역에서 작업하는 여러 팀(또는 동일한 Wagtail 설치 내의 여러 사이트)과 같은 웹사이트 콘텐츠 생성의 요구 사항을 충족하기 위해 [Django 권한 시스템](inv:django#topic-authorization)을 조정하고 확장합니다. 권한은 Wagtail 관리자 인터페이스의 '설정' 아래 '그룹' 영역을 통해 구성할 수 있습니다. ```{note} Wagtail은 여러 사용자 역할과 권한을 지원하지만, Wagtail 관리자는 여전히 신뢰할 수 있는 사용자에게만 제한되어야 합니다. ``` ## 페이지 권한 권한은 페이지 트리의 어느 지점에서든 첨부될 수 있으며, 트리를 따라 전파됩니다. 예를 들어, 사이트에 다음과 같은 페이지 트리가 있는 경우: ``` MegaCorp/ 회사 소개 사무실/ 영국 프랑스 독일 ``` '사무실' 페이지에 대한 '편집' 권한이 있는 그룹은 '영국', '프랑스', '독일' 페이지를 편집할 수 있는 권한을 자동으로 받습니다. 권한은 '루트' 페이지에 할당하여 전체 트리에 대해 전역적으로 설정할 수 있습니다. 모든 페이지는 루트 노드 아래에 존재해야 하고 루트는 삭제할 수 없으므로 이 권한은 현재 및 미래에 존재하는 모든 페이지를 포함합니다. 사용자가 Wagtail 관리자를 통해 페이지를 만들 때마다 해당 사용자는 해당 페이지의 소유자로 지정됩니다. '추가' 권한이 있는 모든 사용자는 자신이 소유한 페이지를 편집하고 새 페이지를 추가할 수 있습니다. 이는 페이지 생성이 일반적으로 여러 초안 버전을 만드는 반복적인 프로세스라는 사실을 인식한 것입니다. 사용자에게 초안을 만들 수 있는 기능을 부여하지만 나중에 편집할 수 없도록 하는 것은 그다지 유용하지 않을 것입니다. 페이지를 편집할 수 있는 기능은 페이지를 삭제할 수 있는 기능도 의미합니다. Django의 표준 권한 모델과 달리 별도의 '삭제' 권한은 없습니다. 사용 가능한 전체 권한 유형은 다음과 같습니다. - **추가** - 이 페이지 아래에 새 하위 페이지를 만들 수 있는 권한(페이지 모델이 이를 허용하는 경우 - [](page_type_business_rules) 참조)과 현재 사용자가 소유한 페이지를 편집하고 삭제할 수 있는 권한을 부여합니다. 게시된 페이지는 사용자가 '게시' 권한도 가지고 있지 않으면 삭제할 수 없습니다. - **편집** - 소유권에 관계없이 이 페이지와 그 아래의 모든 페이지를 편집하고 삭제할 수 있는 권한을 부여합니다. '편집' 권한만 있는 사용자는 새 페이지를 만들 수 없으며 기존 페이지만 편집할 수 있습니다. 게시된 페이지는 사용자가 '게시' 권한도 가지고 있지 않으면 삭제할 수 없습니다. - **게시** - 이 페이지 및/또는 그 자식을 게시하고 게시 취소할 수 있는 권한을 부여합니다. 게시 권한이 없는 사용자는 웹사이트 방문자에게 표시되는 변경 사항을 직접 만들 수 없습니다. 대신 변경 사항을 중재를 위해 제출해야 합니다. 게시 권한은 편집 권한과 독립적입니다. 게시 권한만 있는 사용자는 자체 편집을 할 수 없습니다. - **대량 삭제** - 사용자가 하위 페이지가 있는 페이지를 단일 작업으로 삭제할 수 있도록 합니다. 이 권한이 없으면 사용자는 부모를 삭제하기 전에 하위 페이지를 개별적으로 삭제해야 합니다. 이는 실수로 인한 삭제를 방지하기 위한 안전 장치입니다. 이 권한은 '추가' / '편집' 권한과 함께 사용해야 합니다. 자체 삭제 권한을 제공하지 않기 때문입니다. 사용자가 이미 가지고 있는 권한에 대한 '바로 가기'만 제공합니다. 예를 들어, '추가' 및 '대량 삭제' 권한만 있는 사용자는 영향을 받는 모든 페이지가 해당 사용자가 소유하고 게시되지 않은 경우에만 대량 삭제를 할 수 있습니다. - **잠금** - 이 페이지(및 그 아래의 모든 페이지)를 편집을 위해 잠글 수 있는 권한을 부여하여 다른 사용자가 더 이상 편집할 수 없도록 합니다. - **잠금 해제** - 이 페이지(및 그 아래의 모든 페이지)를 잠금 해제할 수 있는 권한을 부여합니다. 페이지가 다른 사용자에 의해 잠겨 있더라도 마찬가지입니다. 이 권한이 없으면 페이지를 잠근 사용자(및 슈퍼유저)만 페이지를 잠금 해제할 수 있습니다. 초안은 사용자가 편집 또는 게시 권한을 가지고 있는 경우에만 볼 수 있습니다. (image_document_permissions)= ## 이미지 / 문서 권한 이미지 및 문서에 대한 권한 규칙은 페이지와 유사한 방식으로 작동합니다. 이미지 및 문서는 업로드한 사용자가 '소유'한 것으로 간주됩니다. '추가' 권한이 있는 사용자는 자신이 소유한 항목을 편집할 수 있는 권한도 있습니다. 삭제는 특정 권한 유형을 갖는 대신 편집과 동일하게 간주됩니다. 특정 이미지 및 문서 세트에 대한 액세스는 _컬렉션_을 설정하여 제어할 수 있습니다. 기본적으로 모든 이미지 및 문서는 '루트' 컬렉션에 속하지만, 적절한 권한이 있는 사용자는 관리 인터페이스의 설정 -> 컬렉션 영역에서 새 컬렉션을 만들 수 있습니다. '루트'에 설정된 권한은 모든 컬렉션에 적용되므로 루트 컬렉션의 이미지에 대한 '편집' 권한이 있는 사용자는 모든 이미지를 편집할 수 있습니다. 다른 컬렉션에 설정된 권한은 해당 컬렉션 및 모든 하위 컬렉션에만 적용됩니다. 이미지 및 문서에 대한 '선택' 권한은 페이지(및 스니펫과 같은 다른 모델)에 삽입하기 위해 이미지 및 문서 링크를 선택하는 데 사용되는 선택기 인터페이스 내에서 어떤 컬렉션이 표시되는지 결정합니다. 일반적으로 모든 사용자는 모든 컬렉션에 대한 선택 권한을 부여받아 자신이 만든 페이지에서 업로드된 이미지 또는 문서를 사용할 수 있지만, 이 권한을 제한하여 특정 그룹에만 표시되는 컬렉션을 만들 수 있습니다. (collection_management_permissions)= ## 컬렉션 관리 권한 컬렉션 자체를 관리하기 위한 권한은 컬렉션 트리의 어느 지점에서든 첨부될 수 있습니다. 사용 가능한 컬렉션 관리 권한은 다음과 같습니다. - **추가** - 이 컬렉션 아래에 새 컬렉션을 만들 수 있는 권한을 부여합니다. - **편집** - 컬렉션의 이름을 편집하고, 컬렉션 트리에서 위치를 변경하고, 이 컬렉션 내 문서의 개인 정보 설정을 변경할 수 있는 권한을 부여합니다. - **삭제** - 이 컬렉션 아래에 추가된 컬렉션을 삭제할 수 있는 권한을 부여합니다. _참고:_ 컬렉션은 삭제하기 전에 하위 컬렉션이 없어야 하며 컬렉션 자체는 비어 있어야 합니다. ```{note} 사용자는 컬렉션을 관리할 권한을 부여하는 데 사용되는 컬렉션을 이동하거나 삭제할 수 없습니다. ``` ## 사용자 지정 권한 추가 권한을 설정하는 방법에 대한 자세한 내용은 Django의 [사용자 지정 권한](inv:django#custom-permissions)에 대한 문서를 참조하십시오. Wagtail에 등록된 모델에 대한 권한은 Wagtail 관리자 그룹 편집 폼에 자동으로 표시됩니다. 다른 모델의 경우 `register_permissions` 훅을 사용하여 권한을 추가할 수도 있습니다( [](register_permissions) 참조). 특정 모델과 관련 없이 Wagtail 관리자에서 사용할 사용자 지정 권한을 추가하려면 `wagtail.admin.models.Admin` 모델의 콘텐츠 유형을 사용하여 만들 수 있습니다. 예를 들어: ```python from django.contrib.auth.models import Permission from django.contrib.contenttypes.models import ContentType from wagtail.admin.models import Admin content_type = ContentType.objects.get_for_model(Admin) permission = Permission.objects.create( content_type=content_type, codename="can_do_something", name="무언가를 할 수 있음", ) ``` `register_permissions` 훅을 사용하여 권한을 등록하면 Wagtail 관리자 그룹 편집 폼의 '기타 권한' 섹션에 'Wagtail 관리자 액세스 가능' 권한과 함께 표시됩니다. ## `FieldPanel` 및 `PanelGroup` 권한 권한은 편집기 인터페이스 내의 필드에 대한 액세스를 제한하는 데 사용할 수 있습니다. [FieldPanel](field_panel)의 `permission` 을 참조하십시오. 권한은 `PanelGroup` 클래스(`TabbedInterface`, `ObjectList`, `FieldRowPanel`, `MultiFieldPanel`)의 `permission` 키워드 인수를 통해 패널 그룹을 제한하는 데 사용할 수 있습니다. `PanelGroup` 사용법을 사용자 지정하는 방법은 [](forms_panels_overview)를 참조하십시오.