Sprawdź uprawnienia w szablonie w Django


90

Czy mogę użyć sprawdzania uprawnień aplikacji Auth wewnątrz szablonu w Django? (Chcę wyświetlić prosty formularz na końcu szablonu dla uprzywilejowanych użytkowników)

A co ważniejsze, czy powinienem to w ogóle zrobić, czy nie jest to „droga Django”?


Dla ludzi takich jak ja, którzy natkną się na to później, link do Django 1.5 został nieco zmieniony. Informacje można teraz znaleźć w dokumentach pod tym adresem URL: docs.djangoproject.com/en/1.5/topics/auth/default/#permissions Nic w oryginalnej odpowiedzi tak naprawdę się nie zmieniło, ale to tylko nowy adres URL :)
Xudonax

Odpowiedzi:


187

Jeśli chcesz sprawdzić uprawnienia w szablonach, wystarczy następujący kod:

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

Gdzie model odnosi się do modelu, do którego użytkownik potrzebuje uprawnień, aby wyświetlić formularz.

Więcej przykładów znajdziesz na https://docs.djangoproject.com/en/stable/topics/auth/default/#permissions .

Uprawnienia aktualnie zalogowanego użytkownika są przechowywane w zmiennej szablonu {{ perms }}

(To wymaga następujących procesor kontekście jest włączona: django.contrib.auth.context_processors.auth)


14
Pamiętaj, że jeśli jesteś zalogowany jako superużytkownik, perms.app_label.foobarzawsze będzie prawdziwe, nawet jeśli błędnie wpisałeś nazwę uprawnienia.
Flimm

2
Zauważ również, że „can_do_something” jest nazwą uprawnienia, więc nie musisz dodawać przedrostka „can” do nazwy uprawnienia. Np. Perms.my_app.add_object
Karim Sonbol,

11

Testowane na Django 2.0 +

Jeśli chcesz zobaczyć wszystkie uprawnienia, jakie posiada zalogowany użytkownik, w swoim szablonie (.html), wydrukuj:

{{ perms.app_name }}

Lub

{{ perms }}

Aby sprawdzić, czy użytkownik ma uprawnienia, użyj:

{% if perms.app_name.change_model_name_lower_cased %}

Np .:

{% if perms.Utilization.change_invoice %}

Tutaj: Wykorzystanie to nazwa mojej aplikacji. Faktura to nazwa modelu.

Pamiętaj, że ogólnie będą dostępne 4 rodzaje uprawnień:

  • change [np. Utilization.change_projectemail]
  • wyświetl [np. Utilization.view_invoice]
  • usuń [np. Utilization.delete_invoicetype]
  • dodaj [np. Utilization.add_invoicetype]

Ponadto, jeśli chcesz zobaczyć wszystkie uprawnienia, które ma użytkownik ze względu na grupy, do których należy, uruchom powłokę Django ...

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

Tutaj wszystkie wymienione uprawnienia są związane z grupami, do których należy.


1
Tak. Naprawdę: małymi literami. Nie dotyczy węża. Pomysł, aby zobaczyć uprawnienia z {{perms}} jest świetny, więc myślę, że to najlepsza odpowiedź.
mirek


0

przepraszam, że 'odkopałem' ten post, ale mam problem związany z uprawnieniami, zobacz mój post: Django: logika nie jest dobrze zastosowana w szablonie przy użyciu uprawnień (perm

Ponieważ Arindam wydaje się być bardzo zadowolony z tej koncepcji, mam nadzieję, że on lub inny mógłby mi pomóc

uprawnienia nie są stosowane, nawet jeśli wartość jest poprawna, gdy szukam {{perms}} w moim szablonie, zwraca obiekt, ale nie listę uprawnień, jeśli szukam {{perms.randomization.can_randomize}} zwraca False (lub True ) to jest dobra wartość moja aplikacja nazywa się randomization i definiuję uprawnienie can_randomize w modelach randomizacji (przy użyciu meta), które są częścią mojej aplikacji do randomizacji

Sprawdzam settings.py, ale wszystkie szwy są w porządku


Cześć Slater. Widziałem to właśnie dzisiaj. Jest oczywiście za późno. Ale jeśli chcesz polecić kogoś, aby otrzymał wiadomość, dodaj @Name do wiadomości w tej sekcji komentarzy.
Arindam Roychowdhury
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.