Django パーミッションをプログラムから付与し利用する

Djangoのパーミッション機能は、ユーザー毎に権限制御する際に役立ちます。

パーミッションをユーザーに付与する方法ですが管理画面から行うやり方はよく見かけます。しかしプログラム上でユーザーにパーミッションを与えたい場合もあるかと思いますので、今回はそのやり方を記しておこうと思います。

イタリック体は各自で異なります。

models.py
class MyModel(models.Model):
  class Meta:
    permissions = (
      ("permission_code", "Permission description"),
    )

まず、カスタムしたパーミッションを使いたいのであれば、モデルの内部クラスMetaにパーミッション定義を書きマイグレーションすると、PERMISSIONテーブルに独自パーミッション定義が追加されます。

 

views.pyなど

permission = Permission.objects.get(codename=’permission_code‘)  # パーミッションオブジェクトを取得
user.user_permissions.add(permission)  # ユーザーモデルにパーミッションを付与

views.pyなどのプログラムで上記のように書くと、パーミッションがユーザーモデルに紐づきます。具体的にはUSER_PERMISSIONSテーブルにユーザーIDとパーミッションIDが一緒に保存されることで紐付けがされます。

 

template.html

{% if perms.my_app.permission_code %}

{% endif %}

テンプレートでパーミッションに基づき制御したい時は、perms変数にログインユーザーのパーミッション情報が格納されているので、例えば上記のように書くとログインユーザーが自分で定義したパーミッションを持っているかどうかを判断出来ます。

sponsor