DjangoのAdminSiteにて、独自で作成したモデルにstaff権限でアクセスすることができない

実現したいこと

文書管理ツールをDjangoで作っています。
新規ユーザーが管理画面にアクセスすると、文書管理用のmodelを通じて、文書をアップロードしたり、日付を管理したりできる機能を想定しています。

発生している問題・分からないこと

文書管理用のmodelを定義し、Admin Siteへアクセスしたところ、SuperUser(is_superuser=1)によるアクセスでは当該モデルが管理画面に表示されたのですが、スタッフ(is_superuser=0かつis_staff=1)によるアクセスでは表示されませんでした。

該当のソースコード

admin.py

1from django.contrib import admin 2from .models import Contract 3 4class AppUserArea(admin.AdminSite): 5 site_header = '文書管理ツール' 6 7class ContractAdmin(admin.ModelAdmin): 8 9 def has_add_permission(self, request): 10 return True 11 12 def has_change_permission(self, request, Obj=None): 13 return True 14 15 def has_delete_permission(self, request): 16 return True 17 18app_user_area = AppUserArea(name='AppUserArea') 19app_user_area.register(Contract, ContractAdmin)

models.py

1from django.contrib.auth.models import AbstractUser 2from django.db import models 3 4# Create your models here. 5 6class CustomUser(AbstractUser): 7 8 is_staff = models.BooleanField(default=True) 9 10 def __str__(self): 11 return self.email 12 13def contract_path(instance, filename): 14 return 'contract/{0}/{1}'.format(instance.user.id, filename) 15 16class Contract(models.Model): 17 18 class Meta: 19 verbose_name = "契約" 20 verbose_name_plural = "契約" 21 22 user = models.ForeignKey(CustomUser, verbose_name='ユーザー',on_delete=models.CASCADE) 23 contract_title = models.CharField(verbose_name='文書タイトル',max_length=100) 24 ..... 25 updated_at = models.DateTimeField(auto_now=True) 26 27 def __str__(self): 28 return self.contract_title

urls.py

1from django.contrib import admin 2from django.urls import path, include 3from app import views 4from app.admin import app_user_area 5 6urlpatterns = [ 7 path('user/', app_user_area.urls), 8 path('admin/', admin.site.urls), 9 path('accounts/', include('allauth.urls')), 10] 11

試したこと・調べたこと

上記の詳細・結果

djangoのtutorialなどを読み、has_xxx_permissionなどをmodelに追記してみたりしたのですがうまくいきませんでした。

補足

環境
Ubuntu 22.04
Python3
Django 5.0.3

認証にはallauth(0.61.1)を使っています。
また、Admin Siteについては、superuser用のページ(admin/でアクセス)と、User用のページ(user/でアクセス)に分けて作っています。
よろしくお願いいたします。

コメントを投稿

0 コメント