Add read-only admin functionality and enhance billing models in admin interface

This commit is contained in:
IGNY8 VPS (Salman)
2025-12-07 02:05:06 +00:00
parent 7a2b424237
commit 31c06d032c
9 changed files with 311 additions and 3 deletions

View File

@@ -1,8 +1,43 @@
from django.contrib import admin
from django.contrib.admin.apps import AdminConfig
class ReadOnlyAdmin(admin.ModelAdmin):
"""Generic read-only admin for system tables."""
def has_add_permission(self, request):
return False
def has_change_permission(self, request, obj=None):
return False
def has_delete_permission(self, request, obj=None):
return False
def _safe_register(model, model_admin):
try:
admin.site.register(model, model_admin)
except admin.sites.AlreadyRegistered:
pass
class Igny8AdminConfig(AdminConfig):
default_site = 'igny8_core.admin.site.Igny8AdminSite'
name = 'django.contrib.admin'
def ready(self):
super().ready()
# Register Django internals in admin (read-only where appropriate)
from django.contrib.admin.models import LogEntry
from django.contrib.auth.models import Group, Permission
from django.contrib.contenttypes.models import ContentType
from django.contrib.sessions.models import Session
_safe_register(LogEntry, ReadOnlyAdmin)
_safe_register(Permission, admin.ModelAdmin)
_safe_register(Group, admin.ModelAdmin)
_safe_register(ContentType, ReadOnlyAdmin)
_safe_register(Session, ReadOnlyAdmin)

View File

@@ -37,6 +37,12 @@ class Igny8AdminSite(admin.AdminSite):
('igny8_core_auth', 'Subscription'),
('billing', 'CreditTransaction'),
('billing', 'CreditUsageLog'),
('billing', 'Invoice'),
('billing', 'Payment'),
('billing', 'CreditPackage'),
('billing', 'PaymentMethodConfig'),
('billing', 'AccountPaymentMethod'),
('billing', 'CreditCostConfig'),
],
},
'Sites & Users': {
@@ -45,6 +51,7 @@ class Igny8AdminSite(admin.AdminSite):
('igny8_core_auth', 'User'),
('igny8_core_auth', 'SiteUserAccess'),
('igny8_core_auth', 'PasswordResetToken'),
('igny8_core_auth', 'Sector'),
],
},
'Global Reference Data': {
@@ -70,6 +77,10 @@ class Igny8AdminSite(admin.AdminSite):
('writer', 'Tasks'),
('writer', 'Content'),
('writer', 'Images'),
('writer', 'ContentTaxonomy'),
('writer', 'ContentAttribute'),
('writer', 'ContentTaxonomyRelation'),
('writer', 'ContentClusterMap'),
],
},
'Thinker Module': {
@@ -77,6 +88,7 @@ class Igny8AdminSite(admin.AdminSite):
('system', 'AIPrompt'),
('system', 'AuthorProfile'),
('system', 'Strategy'),
('ai', 'AITaskLog'),
],
},
'System Configuration': {
@@ -89,11 +101,38 @@ class Igny8AdminSite(admin.AdminSite):
('system', 'UserSettings'),
('system', 'ModuleSettings'),
('system', 'AISettings'),
('system', 'ModuleEnableSettings'),
# Automation config lives under the automation app - include here
('automation', 'AutomationConfig'),
('automation', 'AutomationRun'),
],
},
'Integrations & Sync': {
'models': [
('integration', 'SiteIntegration'),
('integration', 'SyncEvent'),
],
},
'Publishing': {
'models': [
('publishing', 'PublishingRecord'),
('publishing', 'DeploymentRecord'),
],
},
'Optimization': {
'models': [
('optimization', 'OptimizationTask'),
],
},
'Django Internals': {
'models': [
('admin', 'LogEntry'),
('auth', 'Group'),
('auth', 'Permission'),
('contenttypes', 'ContentType'),
('sessions', 'Session'),
],
},
}
# Build the custom app list
@@ -131,6 +170,10 @@ class Igny8AdminSite(admin.AdminSite):
'Writer Module',
'Thinker Module',
'System Configuration',
'Integrations & Sync',
'Publishing',
'Optimization',
'Django Internals',
]
app_list.sort(key=lambda x: order.index(x['name']) if x['name'] in order else 999)