Periksa izin di dalam templat di Django

90

Dapatkah saya menggunakan pemeriksaan izin aplikasi Auth di dalam templat di Django? (Saya ingin menampilkan formulir sederhana di akhir template untuk pengguna yang memiliki hak istimewa)

Dan yang lebih penting, haruskah saya melakukannya sama sekali atau apakah ini bukan "cara Django"?

Daniel
sumber
Untuk orang-orang seperti saya, yang menemukan ini nanti, tautan untuk Django 1.5 diubah sedikit. Informasi sekarang dapat ditemukan di dokumen di url ini: docs.djangoproject.com/en/1.5/topics/auth/default/#permissions Tidak ada jawaban asli yang benar-benar berubah, tapi ini hanya url baru :)
Xudonax

Jawaban:

187

Jika Anda ingin memeriksa izin di templat, kode berikut sudah cukup:

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

Dimana model mengacu pada model yang pengguna memerlukan izin untuk melihat formulirnya.

Lihat https://docs.djangoproject.com/en/stable/topics/auth/default/#permissions untuk contoh lainnya.

Izin pengguna yang saat ini masuk disimpan di variabel template {{ perms }}

(Ini membutuhkan prosesor konteks berikut harus diaktifkan: django.contrib.auth.context_processors.auth)

Victor Neo
sumber
14
Perhatikan bahwa jika Anda masuk sebagai pengguna super, perms.app_label.foobarakan selalu benar, meskipun Anda salah mengeja nama izin.
Flimm
2
Perhatikan juga di sini bahwa "can_do_something" adalah nama izin, jadi Anda tidak perlu menambahkan awalan "bisa" ke nama izin. Misalnya, perms.my_app.add_object
Karim Sonbol
11

Diuji pada Django 2.0 +

Jika Anda ingin melihat semua izin yang dimiliki pengguna yang masuk, pada template Anda (.html), cetak:

{{ perms.app_name }}

Atau

{{ perms }}

Untuk memeriksa apakah pengguna memiliki izin, gunakan:

{% if perms.app_name.change_model_name_lower_cased %}

Misal:

{% if perms.Utilization.change_invoice %}

Di sini: Pemanfaatan adalah nama Aplikasi saya. Faktur adalah nama model.

Perhatikan bahwa secara umum, akan ada 4 jenis izin:

  • ubah [Misalnya Utilization.change_projectemail]
  • lihat [Misalnya Utilization.view_invoice]
  • hapus [Misalnya Utilization.delete_invoicetype]
  • tambahkan [Misalnya Utilization.add_invoicetype]

Juga, jika anda ingin melihat semua perizinan yang dimiliki pengguna karena grup tempatnya berada, luncurkan Django shell ...

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

Di sini, semua izin yang terdaftar, adalah karena grup tempatnya berada.

Arindam Roychowdhury
sumber
1
Iya. Benar-benar: huruf kecil. Bukan ular_cased. Ide untuk melihat izin dengan {{perms}} bagus, jadi menurut saya ini adalah jawaban terbaik.
mirek
0

maaf untuk 'menggali' posting ini tetapi saya mempunyai masalah terkait dengan izin. Lihat posting saya: Django: logika tidak diterapkan dengan baik dalam templat menggunakan izin (perm

karena Arindam merasa sangat nyaman dengan konsep ini, saya harap dia atau orang lain dapat membantu saya

perms tidak berlaku bahkan jika nilainya benar ketika saya mencari {{perms}} di template saya itu mengembalikan sebuah objek tapi bukan daftar izin jika saya mencari {{perms.randomization.can_randomize}} itu mengembalikan False (atau True ) itulah nilai bagus aplikasi saya dinamai pengacakan dan saya mendefinisikan izin can_randomize dalam model Pengacakan (menggunakan meta) yang merupakan bagian dari aplikasi pengacakan saya

Saya memeriksa settings.py tetapi semua jahitannya ok

TUKANG PENUTUP ATAP
sumber
Hai Slater. Saya melihat ini baru hari ini. Jelas sudah terlambat. Tetapi jika Anda ingin mereferensikan seseorang agar dia mendapat pesan, tambahkan @Name dengan pesan di bagian komentar ini.
Arindam Roychowdhury