Djangoのテンプレート内の権限を確認してください


95

Djangoのテンプレート内でAuthアプリケーションの権限チェックを使用できますか?(特権ユーザーのテンプレートの最後に簡単なフォームを表示したい)

そしてもっと重要なことは、私はそれを行うべきですか、それともこれは「Djangoの方法」ではありませんか?


後でこれに遭遇した私のような人々のために、Django1.5のリンクはわずかに変更されました。情報は次のURLのドキュメントにあります:docs.djangoproject.com/en/1.5/topics/auth/default/#permissions元の回答には実際には何も変更されていませんが、これは新しいURLです:)
Xudonax

回答:


192

テンプレートの権限を確認する場合は、次のコードで十分です。

{% 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


15
スーパーユーザーとしてログインしているperms.app_label.foobar場合は、権限名のスペルを間違えた場合でも、常にtrueになることに注意してください。
Flimm 2017

2
また、「can_do_something」はパーミッションの名前であるため、パーミッション名にプレフィックス「can」を追加する必要がないことにも注意してください。例:perms.my_app.add_object
Karim Sonbol 2018

13

Django2.0以降でテスト済み

ログインしたユーザーが持っているすべての権限をテンプレート(.html)で確認したい場合は、次のように出力します。

{{ perms.app_name }}

または

{{ perms }}

ユーザーに権限があるかどうかを確認するには、次を使用します。

{% if perms.app_name.change_model_name_lower_cased %}

例:

{% if perms.Utilization.change_invoice %}

ここで:使用率は私のアプリ名です。請求書はモデル名です。

一般に、次の4種類のアクセス許可があることに注意してください。

  • 変更[例:Utilization.change_projectemail]
  • ビュー[例:Utilization.view_invoice]
  • 削除[例:Utilization.delete_invoicetype]
  • 追加[例:Utilization.add_invoicetype]

また、ユーザーが所属するグループに起因するすべての権限を表示する場合は、Djangoシェルを起動します...

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

ここにリストされているすべての権限は、彼が属しているグループによるものです。


1
はい。本当に:小文字。snake_casedではありません。{{perms}}で権限を確認するというアイデアは素晴らしいので、これが最良の答えだと思います。
mirek

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.