# -*- coding: utf-8 -*- # Generated by Django 1.9.7 on 2016-08-01 14:54 from __future__ import unicode_literals from django.db import migrations, models from openslides.utils.autoupdate import inform_changed_data_receiver def migrate_groups_and_user_permissions(apps, schema_editor): """ This function migrates the database to the new groups logic: - Rename group 'Anonymous' (pk=1) to 'Default' - Rename group 'Registered users' (pk=2) to 'Previous group Registered' - Add all users who are not in any group to this group (pk=2) - Add all permissions of 'Previous group Registered' to all other groups (except 'Default') But only run this migration if: - there are groups in the database, - the name of the first group is 'Guests', - the name of the second group is 'Registered users'. """ # Disconnect autoupdate. We do not want to trigger it here. models.signals.post_save.disconnect(dispatch_uid='inform_changed_data_receiver') User = apps.get_model('users', 'User') Group = apps.get_model('auth', 'Group') try: group_default = Group.objects.get(pk=1) group_registered = Group.objects.get(pk=2) except Group.DoesNotExist: # One of the groups does not exist. Just do nothing. pass else: if group_default.name == 'Guests' and group_registered.name == 'Registered users': # Rename groups pk 1 and 2. group_default.name = 'Default' group_default.save() group_registered.name = 'Previous group Registered' group_registered.save() # Move users without groups to group pk 2. users = User.objects.all() for user in users: if not user.groups.exists(): user.groups.add(group_registered) # Copy permissions of group pk 2 to all other groups except pk 1. groups = Group.objects.filter(pk__gt=2) for group in groups: for permission in group_registered.permissions.all(): group.permissions.add(permission) # Reconnect autoupdate. models.signals.post_save.connect( inform_changed_data_receiver, dispatch_uid='inform_changed_data_receiver') class Migration(migrations.Migration): dependencies = [ ('users', '0003_user_number'), ] operations = [ migrations.RunPython(migrate_groups_and_user_permissions), ]