docs: def copy_permissions(src_obj, dest_obj):
      """Copy permissions form ``src_obj`` to ``dest_obj``."""
      def _process_permission(codename, user_or_group, dest_obj, relabel):
          """Process single permission."""
          if relabel:
              codename = change_perm_ctype(codename, dest_obj)
              if codename not in dest_all_perms:
                  return  # dest object doesn't have matching permission
  
          assign_perm(codename, user_or_group, dest_obj)
  
      src_obj_ctype = ContentType.objects.get_for_model(src_obj)
      dest_obj_ctype = ContentType.objects.get_for_model(dest_obj)
      dest_all_perms = get_all_perms(dest_obj)
  
      relabel = (src_obj_ctype != dest_obj_ctype)
  
      for perm in UserObjectPermission.objects.filter(object_pk=src_obj.pk, content_type=src_obj_ctype):
          _process_permission(perm.permission.codename, perm.user, dest_obj, relabel)
  
      for perm in GroupObjectPermission.objects.filter(object_pk=src_obj.pk, content_type=src_obj_ctype):
          _process_permission(perm.permission.codename, perm.group, dest_obj, relabel)