diff options
| author | Jacob Walls <jacobtylerwalls@gmail.com> | 2026-01-05 13:58:58 -0500 |
|---|---|---|
| committer | Jacob Walls <jacobtylerwalls@gmail.com> | 2026-01-05 15:48:23 -0500 |
| commit | 42bab76258162e1df77d080aa69cac5d803ae90a (patch) | |
| tree | 0c5915cf0dd2e1af895e876eb448728bec577a3b /django | |
| parent | 764af478be8c25c186d27031c50c9a1d0697781b (diff) | |
[6.0.x] Fixed #36843, #36793 -- Reverted "Fixed #27489 -- Renamed permissions upon model renaming in migrations."
This reverts commits f02b49d2f3bf84f5225de920ca510149f1f9f1da and 6e89271a8507fe272d11814975500a1b40303a04.
Backport of 030c63d329c4814da221528e823a4aaaaa40e4f1 from main.
Diffstat (limited to 'django')
| -rw-r--r-- | django/contrib/auth/apps.py | 9 | ||||
| -rw-r--r-- | django/contrib/auth/management/__init__.py | 82 |
2 files changed, 3 insertions, 88 deletions
diff --git a/django/contrib/auth/apps.py b/django/contrib/auth/apps.py index eeba5b7e13..ad6f816809 100644 --- a/django/contrib/auth/apps.py +++ b/django/contrib/auth/apps.py @@ -1,12 +1,12 @@ from django.apps import AppConfig from django.core import checks from django.db.models.query_utils import DeferredAttribute -from django.db.models.signals import post_migrate, pre_migrate +from django.db.models.signals import post_migrate from django.utils.translation import gettext_lazy as _ from . import get_user_model from .checks import check_middleware, check_models_permissions, check_user_model -from .management import create_permissions, rename_permissions +from .management import create_permissions from .signals import user_logged_in @@ -20,11 +20,6 @@ class AuthConfig(AppConfig): create_permissions, dispatch_uid="django.contrib.auth.management.create_permissions", ) - pre_migrate.connect( - rename_permissions, - dispatch_uid="django.contrib.auth.management.rename_permissions", - ) - last_login_field = getattr(get_user_model(), "last_login", None) # Register the handler only if UserModel.last_login is a field. if isinstance(last_login_field, DeferredAttribute): diff --git a/django/contrib/auth/management/__init__.py b/django/contrib/auth/management/__init__.py index 21d357e32b..e816357b2b 100644 --- a/django/contrib/auth/management/__init__.py +++ b/django/contrib/auth/management/__init__.py @@ -9,9 +9,7 @@ from django.apps import apps as global_apps from django.contrib.auth import get_permission_codename from django.contrib.contenttypes.management import create_contenttypes from django.core import exceptions -from django.db import DEFAULT_DB_ALIAS, migrations, router, transaction -from django.db.utils import IntegrityError -from django.utils.text import camel_case_to_spaces +from django.db import DEFAULT_DB_ALIAS, router def _get_all_permissions(opts): @@ -110,84 +108,6 @@ def create_permissions( print("Adding permission '%s'" % perm) -class RenamePermission(migrations.RunPython): - def __init__(self, app_label, old_model, new_model): - self.app_label = app_label - self.old_model = old_model - self.new_model = new_model - super(RenamePermission, self).__init__( - self.rename_forward, self.rename_backward - ) - - def _rename(self, apps, schema_editor, old_model, new_model): - ContentType = apps.get_model("contenttypes", "ContentType") - # Use the live Permission model instead of the frozen one, since frozen - # models do not retain foreign key constraints. - from django.contrib.auth.models import Permission - - db = schema_editor.connection.alias - ctypes = ContentType.objects.using(db).filter( - app_label=self.app_label, model__icontains=old_model.lower() - ) - for permission in Permission.objects.using(db).filter( - content_type_id__in=ctypes.values("id") - ): - prefix = permission.codename.split("_")[0] - default_verbose_name = camel_case_to_spaces(new_model) - - new_codename = f"{prefix}_{new_model.lower()}" - new_name = f"Can {prefix} {default_verbose_name}" - - if permission.codename != new_codename or permission.name != new_name: - permission.codename = new_codename - permission.name = new_name - try: - with transaction.atomic(using=db): - permission.save(update_fields={"name", "codename"}) - except IntegrityError: - pass - - def rename_forward(self, apps, schema_editor): - self._rename(apps, schema_editor, self.old_model, self.new_model) - - def rename_backward(self, apps, schema_editor): - self._rename(apps, schema_editor, self.new_model, self.old_model) - - -def rename_permissions( - plan, - verbosity=2, - interactive=True, - using=DEFAULT_DB_ALIAS, - apps=global_apps, - **kwargs, -): - """ - Insert a `RenamePermissionType` operation after every planned `RenameModel` - operation. - """ - try: - Permission = apps.get_model("auth", "Permission") - except LookupError: - return - else: - if not router.allow_migrate_model(using, Permission): - return - - for migration, backward in plan: - inserts = [] - for index, operation in enumerate(migration.operations): - if isinstance(operation, migrations.RenameModel): - operation = RenamePermission( - migration.app_label, - operation.old_name, - operation.new_name, - ) - inserts.append((index + 1, operation)) - for inserted, (index, operation) in enumerate(inserts): - migration.operations.insert(inserted + index, operation) - - def get_system_username(): """ Return the current system user's username, or an empty string if the |
