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変数にログインユーザーのパーミッション情報が格納されているので、例えば上記のように書くとログインユーザーが自分で定義したパーミッションを持っているかどうかを判断出来ます。