Django의 템플릿 내부에서 권한 확인


90

Django의 템플릿 내에서 Auth 애플리케이션의 권한 검사를 사용할 수 있나요? (권한이있는 사용자를 위해 템플릿 끝에 간단한 양식을 표시하고 싶습니다.)

그리고 더 중요한 것은 내가 그것을해야 하는가 아니면 이것이 "장고 방식"이 아닌가?


나중에 이것을 우연히 발견 한 저와 같은 사람들을 위해 Django 1.5의 링크가 약간 변경되었습니다. 정보는 이제 다음 URL의 문서에서 찾을 수 있습니다. docs.djangoproject.com/en/1.5/topics/auth/default/#permissions 원래 답변에서 실제로 변경된 사항은 없지만 새 URL입니다. :)
Xudonax

답변:


187

템플릿에서 권한을 확인하려는 경우 다음 코드로 충분합니다.

{% if perms.app_label.can_do_something %}
<form here>
{% endif %}

여기서 model은 사용자가 양식을보기 위해 권한이 필요한 모델을 나타냅니다.

더 많은 예제 는 https://docs.djangoproject.com/en/stable/topics/auth/default/#permissions 를 참조하십시오 .

현재 로그인 한 사용자의 권한은 템플릿 변수에 저장됩니다. {{ perms }}

(이렇게하려면 다음 컨텍스트 프로세서를 활성화해야합니다. django.contrib.auth.context_processors.auth)


14
수퍼 유저로 로그인 한 perms.app_label.foobar경우 권한 이름을 잘못 입력 한 경우에도 항상 true가됩니다.
Flimm

2
또한 여기서 "can_do_something"은 권한의 이름이므로 권한 이름에 접두사 "can"을 추가 할 필요가 없습니다. 예, perms.my_app.add_object
카림 Sonbol

11

Django 2.0 이상에서 테스트 됨

로그인 한 사용자가 가진 모든 권한을 보려면 템플릿 (.html)에서 다음을 인쇄하십시오.

{{ perms.app_name }}

또는

{{ perms }}

사용자에게 권한이 있는지 확인하려면 다음을 사용하십시오.

{% if perms.app_name.change_model_name_lower_cased %}

예 :

{% if perms.Utilization.change_invoice %}

여기 : Utilization은 내 앱 이름입니다. 송장은 모델 이름입니다.

일반적으로 다음과 같은 4 가지 종류의 권한이 있습니다.

  • 변경 [예 : Utilization.change_projectemail]
  • 보기 [예 : Utilization.view_invoice]
  • delete [예 : Utilization.delete_invoicetype]
  • add [예 : Utilization.add_invoicetype]

또한 사용자가 속한 그룹으로 인해 사용자가 가진 모든 권한을 보려면 Django 셸을 시작합니다.

user = User.objects.get(username='somename')
user.get_group_permissions()

여기에 나열된 모든 권한은 그가 속한 그룹 때문입니다.


1
예. 정말 : 소문자입니다. snake_cased가 아닙니다. {{perms}}로 권한을 보는 아이디어는 훌륭하므로 이것이 최선의 답이라고 생각합니다.
mirek


0

이 게시물을 '발견'해서 미안하지만 권한과 관련된 문제가 있습니다. 내 게시물을 참조하십시오. Django : 권한을 사용하여 템플릿에 논리가 잘 적용되지 않음 (perm

Arindam 이음새가이 개념에 매우 익숙해지기 때문에 그 또는 다른 사람이 나를 도울 수 있기를 바랍니다.

내 템플릿에서 {{perms}}를 찾을 때 값이 정확하더라도 perms가 적용되지 않습니다. {{perms.randomization.can_randomize}}를 검색하면 개체가 반환되지만 권한 목록은 반환되지 않습니다. False (또는 True)를 반환합니다. ) 내 앱의 이름이 randomization이고 무작위 화 앱의 일부인 Randomization 모델 (메타 사용)에서 can_randomize 권한을 정의합니다.

settings.py를 확인하지만 모든 솔기가 괜찮습니다.


안녕하세요 슬레이터. 오늘 봤어요. 분명히 너무 늦었습니다. 그러나 누군가가 메시지를 받도록 추천하려면이 주석 섹션에 메시지와 함께 @Name을 추가하십시오.
Arindam Roychowdhury
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.