Merge pull request #3641 from FinnStutzenstein/add-perms-during-migrations
Adding new permission to groups during migration from 2.1.1 to 2.2
This commit is contained in:
commit
1ac3cb7552
@ -4,6 +4,9 @@ from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
from openslides.utils.migrations import \
|
||||
add_permission_to_groups_based_on_existing_permission
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
@ -24,4 +27,7 @@ class Migration(migrations.Migration):
|
||||
)
|
||||
},
|
||||
),
|
||||
migrations.RunPython(add_permission_to_groups_based_on_existing_permission(
|
||||
'can_manage', 'item', 'agenda', 'can_manage_list_of_speakers', 'Can manage list of speakers'
|
||||
)),
|
||||
]
|
||||
|
@ -4,6 +4,9 @@ from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
from openslides.utils.migrations import \
|
||||
add_permission_to_groups_based_on_existing_permission
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
@ -22,4 +25,7 @@ class Migration(migrations.Migration):
|
||||
)
|
||||
},
|
||||
),
|
||||
migrations.RunPython(add_permission_to_groups_based_on_existing_permission(
|
||||
'can_manage_config', 'configstore', 'core', 'can_manage_logos', 'Can manage logos'
|
||||
)),
|
||||
]
|
||||
|
36
openslides/utils/migrations.py
Normal file
36
openslides/utils/migrations.py
Normal file
@ -0,0 +1,36 @@
|
||||
from django.contrib.auth.models import Permission
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
|
||||
|
||||
def add_permission_to_groups_based_on_existing_permission(codename, model, app_label, new_codename, new_name):
|
||||
"""
|
||||
Creates the new permission given by new_codename and new_name to all groups,
|
||||
that have the base permission. This base permission is given by codename, model
|
||||
and app_label. The new permission will have the same content type as the base
|
||||
permission. The migration just runs, if the base permission and content type do
|
||||
exist, so this does not run for a fresh database.
|
||||
"""
|
||||
|
||||
def function(apps, schema_editor):
|
||||
content_type = ContentType.objects.filter(model=model, app_label=app_label)
|
||||
base_perm = Permission.objects.filter(codename=codename, content_type=content_type)
|
||||
|
||||
if len(base_perm) is 1 and len(content_type) is 1:
|
||||
# get the actual content type and base permission
|
||||
base_perm = base_perm.get()
|
||||
content_type = content_type.get()
|
||||
|
||||
# Save groups. list() is necessary to evaluate the database query right now.
|
||||
groups = list(base_perm.group_set.all())
|
||||
|
||||
# Create new permission
|
||||
perm = Permission.objects.create(
|
||||
codename=new_codename,
|
||||
name=new_name,
|
||||
content_type=content_type)
|
||||
|
||||
# Add this permission to all groups
|
||||
for group in groups:
|
||||
group.permissions.add(perm)
|
||||
group.save()
|
||||
return function
|
Loading…
Reference in New Issue
Block a user