LoginSignup
0
0

More than 3 years have passed since last update.

Djangoのadminサイトへログイン可能なユーザ権限を変更する

Last updated at Posted at 2020-06-07

背景

仕事でadminサイトへのへログイン可能なユーザ権限を変更する必要があった。
通常だと、Djangoが認証で利用するユーザーモデルのis_staffを利用するが、今回はis_staffを利用しない方法で行う。
あまり良い記事が見つからなかったため執筆。

環境

Django==3.0.6

内容

Djangoのadminサイトへのアクセス権限は以下のメソッドで行われているよう。
通常だとis_activeとis_staffがTrueのユーザを認証していますね。

django/contrib/admin/sites.py
class AdminSite:
    ...
    def has_permission(self, request):
        """
        Return True if the given HttpRequest has permission to view
        *at least one* page in the admin site.
        """
        return request.user.is_active and request.user.is_staff
    ...

adminサイトへのアクセス権限を変更するためにはhas_permission()をオーバーライドします。has_permisson()内で独自の認証ロジックを作成し、戻り値としてTrue or Falseを返します。作成したMyAdminSiteを管理サイトとして設定します。(MyAdminConfig)
※今回はプロジェクトの設定ディレクトリにadmin.pyとして配置しましたが、どこでも構いません。

from django.contrib.admin.sites import AdminSite
from django.contrib.admin.apps import AdminConfig


class MyAdminSite(AdminSite):
    def has_permission(self, request):
        return "custom permission logic here"


class MyAdminConfig(AdminConfig):
    default_site = 'config.admin.MyAdminSite'

settings.INSTALLED_APPSのadminを作成したMyAdminConfigに変更するのも忘れずに

INSTALLED_APPS = [
#   'django.contrib.admin'
    'config.admin.MyAdminConfig',
    ...
]
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0