diff --git a/bds/apps.py b/bds/apps.py index 7c08d34e..525776ec 100644 --- a/bds/apps.py +++ b/bds/apps.py @@ -1,6 +1,36 @@ from django.apps import AppConfig +from django.db.models.signals import post_migrate + + +def setup_groups(sender, apps, **kwargs): + """ + Add the appropriate permissions to the "member" and "buro" groups after the + `post_migrate` signal since the permissions will only be inserted in the + database at the very end of the migrations. + """ + Group = apps.get_model("auth", "Group") + Permission = apps.get_model("auth", "Permission") + + # Buro members have perms bds.* and gestion.* + buro, _ = Group.objects.get_or_create(name="bds_buro") + app_perms = Permission.objects.filter( + content_type__app_label__in=["cof", "gestion"] + ) + buro.permissions.add(*app_perms) + + # Members have perm bds.member + members, _ = Group.objects.get_or_create(name="bds_members") + perm = Permission.objects.get( + codename="member", + content_type__app_label="bds" + ) + members.permissions.add(perm) class BDSConfig(AppConfig): name = "bds" verbose_name = "Application de gestion du BDS" + + def ready(self): + # https://docs.djangoproject.com/en/1.11/ref/signals/#post-migrate + post_migrate.connect(setup_groups, sender=self) diff --git a/bds/migrations/0002_add_BDS_groups.py b/bds/migrations/0002_add_BDS_groups.py index 45510e59..33cecf41 100644 --- a/bds/migrations/0002_add_BDS_groups.py +++ b/bds/migrations/0002_add_BDS_groups.py @@ -4,15 +4,6 @@ from __future__ import unicode_literals from django.db import migrations -def create_groups(apps, schema_editor): - """ - Creates the groups for BDS members and staff - """ - Group = apps.get_model("auth", "Group") - Group.objects.get_or_create(name="bds_members") - Group.objects.get_or_create(name="bds_buro") - - class Migration(migrations.Migration): dependencies = [ @@ -31,5 +22,4 @@ class Migration(migrations.Migration): 'verbose_name_plural': 'Profils BDS' }, ), - migrations.RunPython(create_groups, migrations.RunPython.noop), ] diff --git a/cof/apps.py b/cof/apps.py index f981ee91..c40e8896 100644 --- a/cof/apps.py +++ b/cof/apps.py @@ -1,6 +1,36 @@ from django.apps import AppConfig +from django.db.models.signals import post_migrate + + +def setup_groups(sender, apps, **kwargs): + """ + Add the appropriate permissions to the "member" and "buro" groups after the + `post_migrate` signal since the permissions will only be inserted in the + database at the very end of the migrations. + """ + Group = apps.get_model("auth", "Group") + Permission = apps.get_model("auth", "Permission") + + # Buro members have perms cof.* and gestion.* + buro, _ = Group.objects.get_or_create(name="cof_buro") + app_perms = Permission.objects.filter( + content_type__app_label__in=["cof", "gestion"] + ) + buro.permissions.add(*app_perms) + + # Members have perm cof.member + members, _ = Group.objects.get_or_create(name="cof_members") + perm = Permission.objects.get( + codename="member", + content_type__app_label="cof" + ) + members.permissions.add(perm) class COFConfig(AppConfig): name = "cof" verbose_name = "Application de gestion du COF" + + def ready(self): + # https://docs.djangoproject.com/en/1.11/ref/signals/#post-migrate + post_migrate.connect(setup_groups, sender=self) diff --git a/cof/migrations/0009_generic_profiles.py b/cof/migrations/0009_generic_profiles.py index e24ebd2f..1996295a 100644 --- a/cof/migrations/0009_generic_profiles.py +++ b/cof/migrations/0009_generic_profiles.py @@ -23,27 +23,16 @@ def create_profile(apps, schema_editor): def preserve_perms(apps, schema_editor): - # from django.contrib.auth.management import create_permissions - - # apps.models_module = True - # create_permissions(apps, verbosity=0) - # apps.models_module = None - - CofProfile = apps.get_model("cof", "CofProfile") - # memberp = Permission.objects.get(codename='member') - # burop = Permission.objects.get(codename='buro') + COFProfile = apps.get_model("cof", "CofProfile") # creates the groups for COF members and member = Group.objects.create(name='cof_members') buro = Group.objects.create(name='cof_buro') - # associate permissions to the respective groups. - # buro.permissions = [burop, memberp] - # member.permissions = [memberp] - - for cofp in CofProfile.objects.filter(is_cof=True): + cprofiles = COFProfile.objects.select_related("profile__user") + for cofp in cprofiles.filter(is_cof=True): cofp.profile.user.groups.add(member) - for cofp in CofProfile.objects.filter(is_buro=True): + for cofp in cprofiles.filter(is_buro=True): cofp.profile.user.groups.add(buro) diff --git a/cof/migrations/0010_create_cof_group.py b/cof/migrations/0010_create_cof_group.py deleted file mode 100644 index f2ce104a..00000000 --- a/cof/migrations/0010_create_cof_group.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations - - -def create_cof_group(apps, schema_editor): - Group = apps.get_model("auth", "Group") - Group.objects.get_or_create(name="cof_members") - - -def create_buro_group(apps, schema_editor): - Group = apps.get_model("auth", "Group") - Group.objects.get_or_create(name="cof_buro") - - -class Migration(migrations.Migration): - - dependencies = [ - ('cof', '0009_generic_profiles'), - ] - - operations = [ - migrations.RunPython(create_cof_group, migrations.RunPython.noop), - migrations.RunPython(create_buro_group, migrations.RunPython.noop), - ] diff --git a/cof/migrations/0011_delete_clipper_and_custommail.py b/cof/migrations/0011_delete_clipper_and_custommail.py index 92ff4d40..1cfae5f5 100644 --- a/cof/migrations/0011_delete_clipper_and_custommail.py +++ b/cof/migrations/0011_delete_clipper_and_custommail.py @@ -7,7 +7,7 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('cof', '0010_create_cof_group'), + ('cof', '0009_generic_profiles'), ] operations = [