OpenSlides/openslides/users/migrations/0004_groups.py

63 lines
2.2 KiB
Python
Raw Normal View History

2016-08-30 09:16:47 +02:00
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-08-01 14:54
from __future__ import unicode_literals
2016-09-08 11:40:58 +02:00
from django.db import migrations, models
2016-08-30 09:16:47 +02:00
def migrate_groups_and_user_permissions(apps, schema_editor):
"""
This function migrates the database to the new groups logic:
2016-09-08 11:40:58 +02:00
- Rename group 'Anonymous' (pk=1) to 'Default'
- Rename group 'Registered users' (pk=2) to 'Previous group Registered'
2016-08-30 09:16:47 +02:00
- Add all users who are not in any group to this group (pk=2)
2016-09-08 11:40:58 +02:00
- Add all permissions of 'Previous group Registered' to all other groups (except 'Default')
2016-08-30 09:16:47 +02:00
2016-09-08 11:40:58 +02:00
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'.
2016-08-30 09:16:47 +02:00
"""
2016-09-08 11:40:58 +02:00
# Disconnect autoupdate. We do not want to trigger it here.
models.signals.post_save.disconnect(dispatch_uid='inform_changed_data_receiver')
2016-08-30 09:16:47 +02:00
User = apps.get_model('users', 'User')
Group = apps.get_model('auth', 'Group')
2016-09-08 11:40:58 +02:00
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)
2016-08-30 09:16:47 +02:00
class Migration(migrations.Migration):
dependencies = [
('users', '0003_user_number'),
]
operations = [
migrations.RunPython(migrate_groups_and_user_permissions),
]