@@ -56,7 +56,7 @@ def cleanup_orphaned_permissions(apps):
5656 """
5757 Delete orphaned DABPermission objects for models no longer in the permission registry.
5858
59- This is used during migrations to clean up permissions that were auto-created for models
59+ This is used during migrations to clean up permissions for any previously-registered model
6060 that are no longer tracked by RBAC, but only if they are not referenced by any RoleDefinition.
6161
6262 Args:
@@ -82,8 +82,17 @@ def cleanup_orphaned_permissions(apps):
8282 model_key = (permission .content_type .app_label , permission .content_type .model )
8383 if model_key not in registered_model_keys :
8484 # Check if this permission is referenced by any RoleDefinition
85- is_referenced = role_definition_cls .objects .filter (permissions = permission ).exists ()
86- if not is_referenced :
85+ referencing_roles = role_definition_cls .objects .filter (permissions = permission )
86+ if referencing_roles .exists ():
87+ # Log warning for unregistered model still referenced by role definitions
88+ role_names = list (referencing_roles .values_list ('name' , flat = True ))
89+ logger .warning (
90+ f'Permission { permission .codename } for unregistered model '
91+ f'{ permission .content_type .app_label } .{ permission .content_type .model } '
92+ f'is still referenced by role definitions: { role_names } '
93+ )
94+ else :
95+ logger .info (f'Deleting orphaned permission { permission .codename } for unregistered model { model_key } ' )
8796 orphaned_permissions .append (permission )
8897
8998 # Delete orphaned permissions
@@ -107,12 +116,12 @@ def migrate_content_type(apps, schema_editor):
107116 apps: Django apps registry (from migration context)
108117 schema_editor: Django schema editor (unused but required for migration signature)
109118 """
110- ct_cls = apps .get_model ('dab_rbac' , 'DABContentType' )
111- ct_cls .objects .clear_cache ()
112-
113119 # Pre-check: Delete orphaned DABPermission objects before migration
114120 cleanup_orphaned_permissions (apps )
115121
122+ ct_cls = apps .get_model ('dab_rbac' , 'DABContentType' )
123+ ct_cls .objects .clear_cache ()
124+
116125 for model_name in ('dabpermission' , 'objectrole' , 'roledefinition' , 'roleuserassignment' , 'roleteamassignment' ):
117126 cls = apps .get_model ('dab_rbac' , model_name )
118127 update_ct = 0
0 commit comments