ฉันสามารถใช้การอนุญาตของแอปพลิเคชัน Auth เพื่อตรวจสอบเทมเพลตใน Django ได้หรือไม่ (ฉันต้องการแสดงแบบฟอร์มง่ายๆที่ส่วนท้ายของเทมเพลตสำหรับผู้ใช้ที่มีสิทธิพิเศษ)
และที่สำคัญฉันควรทำเลยหรือนี่ไม่ใช่ "Django way"?
ฉันสามารถใช้การอนุญาตของแอปพลิเคชัน Auth เพื่อตรวจสอบเทมเพลตใน Django ได้หรือไม่ (ฉันต้องการแสดงแบบฟอร์มง่ายๆที่ส่วนท้ายของเทมเพลตสำหรับผู้ใช้ที่มีสิทธิพิเศษ)
และที่สำคัญฉันควรทำเลยหรือนี่ไม่ใช่ "Django way"?
คำตอบ:
หากคุณต้องการตรวจสอบสิทธิ์ในแม่แบบรหัสต่อไปนี้จะเพียงพอ:
{% 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
)
perms.app_label.foobar
จะเป็นจริงเสมอแม้ว่าคุณจะสะกดชื่อสิทธิ์ผิด
ทดสอบกับ Django 2.0 +
หากคุณต้องการดูสิทธิ์ทั้งหมดที่ผู้ใช้ล็อกอินมีบนเทมเพลตของคุณ (.html) ให้พิมพ์:
{{ perms.app_name }}
หรือ
{{ perms }}
ในการตรวจสอบว่าผู้ใช้มีสิทธิ์หรือไม่ให้ใช้:
{% if perms.app_name.change_model_name_lower_cased %}
เช่น :
{% if perms.Utilization.change_invoice %}
ที่นี่: การใช้งานคือชื่อแอปของฉัน ใบแจ้งหนี้เป็นชื่อรุ่น
โปรดทราบว่าโดยทั่วไปจะมีการอนุญาต 4 ประเภท:
นอกจากนี้หากคุณต้องการดูการอนุญาตทั้งหมดที่ผู้ใช้มีเนื่องจากกลุ่มที่เขาเป็นสมาชิกให้เปิด Django shell ...
user = User.objects.get(username='somename')
user.get_group_permissions()
ที่นี่การอนุญาตทั้งหมดที่อยู่ในรายการเป็นเพราะกลุ่มที่เขาอยู่
หากคุณต้องการความละเอียดมากขึ้นในการตรวจสอบ perms (เช่นในออบเจ็กต์หนึ่ง ๆ ) ลองดูส่วนขยายนี้: http://django-authority.readthedocs.org/en/latest/check_templates/