Django'da bir şablon içindeki izni kontrol edin


95

Auth uygulamasının izin denetimini Django'da bir şablon içinde kullanabilir miyim? (Ayrıcalıklı kullanıcılar için şablonun sonunda basit bir form görüntülemek istiyorum)

Ve daha da önemlisi, bunu hiç yapmalı mıyım yoksa bu "Django tarzı" değil mi?


Benim gibi, bununla daha sonra karşılaşan insanlar için, Django 1.5 bağlantısı biraz değiştirildi. Bilgiler artık bu url'deki belgelerde bulunabilir: docs.djangoproject.com/en/1.5/topics/auth/default/#permissions Orijinal yanıtta hiçbir şey gerçekten değişmedi, ancak bu sadece yeni bir url :)
Xudonax

Yanıtlar:


192

Şablonlardaki izinleri kontrol etmek istiyorsanız, aşağıdaki kod yeterli olacaktır:

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

Model, kullanıcının formu görmek için izinlere ihtiyaç duyduğu modeli ifade eder.

Daha fazla örnek için https://docs.djangoproject.com/en/stable/topics/auth/default/#permissions adresine bakın .

Şu anda oturum açmış olan kullanıcının izinleri şablon değişkeninde saklanır {{ perms }}

(Bu etkin olması için, aşağıdaki içerik işlemci gerektirir: django.contrib.auth.context_processors.auth)


15
Süper kullanıcı olarak oturum perms.app_label.foobaraçtıysanız, izin adını yanlış yazsanız bile her zaman doğru olacağını unutmayın.
Flimm

2
Ayrıca burada "can_do_something" in iznin adı olduğunu unutmayın, bu nedenle izin adına bir "can" öneki eklemenize gerek yoktur. Ör. Perms.my_app.add_object
Karim Sonbol

13

Django 2.0 + üzerinde test edildi

Oturum açmış kullanıcının sahip olduğu tüm izinleri şablonunuzda (.html) görmek istiyorsanız, şunu yazdırın:

{{ perms.app_name }}

Veya

{{ perms }}

Kullanıcının izni olup olmadığını kontrol etmek için şunu kullanın:

{% if perms.app_name.change_model_name_lower_cased %}

Örneğin :

{% if perms.Utilization.change_invoice %}

Burada: Kullanım benim Uygulama adımdır. Fatura bir model adıdır.

Genel olarak 4 tür izin olacağını unutmayın:

  • değiştir [Örn. Utilization.change_projectemail]
  • [Örn. Utilization.view_invoice] görüntüle
  • [Ör. Utilization.delete_invoicetype] 'ı sil
  • [Örneğin Utilization.add_invoicetype] ekleyin

Ayrıca, bir kullanıcının ait olduğu gruplar nedeniyle sahip olduğu tüm izinleri görmek istiyorsanız, Django kabuğunu başlatın ...

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

Burada listelenen tüm izinler ait olduğu gruplardan kaynaklanmaktadır.


1
Evet. Gerçekten: küçük harfli. Snake_cased değil. {{Perms}} ile izinleri görme fikri harika, bu yüzden bence en iyi cevap bu.
mirek

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.