diff --git a/server/apps/org/admin.py b/server/apps/org/admin.py index 90db35fe..61af84df 100644 --- a/server/apps/org/admin.py +++ b/server/apps/org/admin.py @@ -1,6 +1,9 @@ from django.contrib import admin +from django.contrib.auth.models import Permission +from django.contrib.contenttypes.models import ContentType +from guardian.admin import GuardedModelAdmin -from apps.org.models import Org, OrgAccess +from apps.org.models import Org, OrgAccess, OrgGroupObjectPermission, OrgUserObjectPermission from apps.site.models import Site admin.site.register(OrgAccess) @@ -19,3 +22,21 @@ def rcrainfo_integrated(self, obj): def number_of_sites(self, org: Org): return Site.objects.filter(org=org).count() + + +@admin.register(OrgUserObjectPermission) +class OrgUserObjectPermissionAdmin(GuardedModelAdmin): + def formfield_for_foreignkey(self, db_field, request, **kwargs): + if db_field.name == "permission": + content_type = ContentType.objects.get_for_model(Site) + kwargs["queryset"] = Permission.objects.filter(content_type=content_type) + return super().formfield_for_foreignkey(db_field, request, **kwargs) + + +@admin.register(OrgGroupObjectPermission) +class OrgGroupObjectPermissionAdmin(GuardedModelAdmin): + def formfield_for_foreignkey(self, db_field, request, **kwargs): + if db_field.name == "permission": + content_type = ContentType.objects.get_for_model(Site) + kwargs["queryset"] = Permission.objects.filter(content_type=content_type) + return super().formfield_for_foreignkey(db_field, request, **kwargs) diff --git a/server/apps/site/admin.py b/server/apps/site/admin.py index 5fd18a9a..ad87c304 100644 --- a/server/apps/site/admin.py +++ b/server/apps/site/admin.py @@ -1,6 +1,9 @@ from django.contrib import admin +from django.contrib.auth.models import Permission +from django.contrib.contenttypes.models import ContentType +from guardian.admin import GuardedModelAdmin -from apps.site.models import Site +from apps.site.models import Site, SiteGroupObjectPermission, SiteUserObjectPermission @admin.register(Site) @@ -8,3 +11,21 @@ class HaztrakSiteAdmin(admin.ModelAdmin): list_display = ["__str__", "last_rcrainfo_manifest_sync"] readonly_fields = ["rcra_site"] search_fields = ["rcra_site__epa_id"] + + +@admin.register(SiteUserObjectPermission) +class SiteUserObjectPermissionAdmin(GuardedModelAdmin): + def formfield_for_foreignkey(self, db_field, request, **kwargs): + if db_field.name == "permission": + content_type = ContentType.objects.get_for_model(Site) + kwargs["queryset"] = Permission.objects.filter(content_type=content_type) + return super().formfield_for_foreignkey(db_field, request, **kwargs) + + +@admin.register(SiteGroupObjectPermission) +class SiteGroupObjectPermissionAdmin(GuardedModelAdmin): + def formfield_for_foreignkey(self, db_field, request, **kwargs): + if db_field.name == "permission": + content_type = ContentType.objects.get_for_model(Site) + kwargs["queryset"] = Permission.objects.filter(content_type=content_type) + return super().formfield_for_foreignkey(db_field, request, **kwargs) diff --git a/server/apps/site/migrations/0003_alter_sitegroupobjectpermission_options_and_more.py b/server/apps/site/migrations/0003_alter_sitegroupobjectpermission_options_and_more.py new file mode 100644 index 00000000..fd0d940b --- /dev/null +++ b/server/apps/site/migrations/0003_alter_sitegroupobjectpermission_options_and_more.py @@ -0,0 +1,21 @@ +# Generated by Django 5.0.7 on 2024-07-22 20:17 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('site', '0002_alter_siteaccess_options_sitegroupobjectpermission_and_more'), + ] + + operations = [ + migrations.AlterModelOptions( + name='sitegroupobjectpermission', + options={'verbose_name': 'Site Role', 'verbose_name_plural': 'Site Roles'}, + ), + migrations.AlterModelOptions( + name='siteuserobjectpermission', + options={'verbose_name': 'Site Permission', 'verbose_name_plural': 'Site Permissions'}, + ), + ] diff --git a/server/apps/site/models.py b/server/apps/site/models.py index bcf2b68e..cd6e3f93 100644 --- a/server/apps/site/models.py +++ b/server/apps/site/models.py @@ -125,10 +125,18 @@ def __str__(self): class SiteUserObjectPermission(UserObjectPermissionBase): """Site object level permission.""" + class Meta(UserObjectPermissionBase.Meta): + verbose_name = "Site Permission" + verbose_name_plural = "Site Permissions" + content_object = models.ForeignKey(Site, on_delete=models.CASCADE) class SiteGroupObjectPermission(GroupObjectPermissionBase): """Site object level Group.""" + class Meta(GroupObjectPermissionBase.Meta): + verbose_name = "Site Role" + verbose_name_plural = "Site Roles" + content_object = models.ForeignKey(Site, on_delete=models.CASCADE)