From ebc1643713d97e25ca939c2510aff23ce137ae0f Mon Sep 17 00:00:00 2001
From: "J.-S. Caux" <J.S.Caux@uva.nl>
Date: Fri, 1 Mar 2019 18:53:41 +0100
Subject: [PATCH] Remove partners-related permissions (including
 django-generated)

---
 organizations/views.py                        |  2 +-
 .../0025_partners_groups_permissions.py       | 90 +++++++++++++++++++
 .../commands/add_groups_and_permissions.py    | 47 ----------
 3 files changed, 91 insertions(+), 48 deletions(-)
 create mode 100644 partners/migrations/0025_partners_groups_permissions.py

diff --git a/organizations/views.py b/organizations/views.py
index fc70b5f9a..df80d6f32 100644
--- a/organizations/views.py
+++ b/organizations/views.py
@@ -237,7 +237,7 @@ def email_contactperson(request, contactperson_id, mail=None):
         return mail_request.return_render()
 
 
-@permission_required('scipost.can_manage_SPB', return_403=True)
+@permission_required('scipost.can_manage_organizations', return_403=True)
 def organization_add_contact(request, organization_id, contactperson_id=None):
     organization = get_object_or_404(Organization, id=organization_id)
     if contactperson_id:
diff --git a/partners/migrations/0025_partners_groups_permissions.py b/partners/migrations/0025_partners_groups_permissions.py
new file mode 100644
index 000000000..add572d18
--- /dev/null
+++ b/partners/migrations/0025_partners_groups_permissions.py
@@ -0,0 +1,90 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2019-03-01 16:49
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+def delete_partner_groups(apps, schema_editor):
+    Group = apps.get_model('auth', 'Group')
+    try:
+        PartnersAdmin = Group.objects.get(name='Partners Administrators')
+        PartnersAdmin.delete()
+    except Group.DoesNotExist:
+        pass
+    try:
+        PartnersOfficers = Group.objects.get(name='Partners Officers')
+        PartnersOfficers.delete()
+    except Group.DoesNotExist:
+        pass
+    try:
+        PartnersAccounts = Group.objects.get(name='Partners Accounts')
+        PartnersAccounts.delete()
+    except Group.DoesNotExist:
+        pass
+
+
+def delete_partner_permissions(apps, schema_editor):
+    Permission = apps.get_model('auth', 'Permission')
+    try:
+        can_manage_SPB = Permission.objects.get(codename='can_manage_SPB')
+        can_manage_SPB.delete()
+    except Permission.DoesNotExist:
+        pass
+    try:
+        can_email_prospartner_contact = Permission.objects.get(
+            codename='can_email_prospartner_contact')
+        can_email_prospartner_contact.delete()
+    except Permission.DoesNotExist:
+        pass
+    try:
+        can_read_partner_page = Permission.objects.get(
+            codename='can_read_partner_page')
+        can_read_partner_page.delete()
+    except Permission.DoesNotExist:
+        pass
+    try:
+        can_view_partners = Permission.objects.get(
+            codename='can_view_partners')
+        can_view_partners.delete()
+    except Permission.DoesNotExist:
+        pass
+    try:
+        can_view_own_partner_details = Permission.objects.get(
+            codename='can_view_own_partner_details')
+        can_view_own_partner_details.delete()
+    except Permission.DoesNotExist:
+        pass
+
+
+def delete_model_permissions(apps, schema_editor):
+    ContentType = apps.get_model('contenttypes.ContentType')
+    Permission = apps.get_model('auth.Permission')
+    for modelname in ['consortium', 'contact', 'contactperson', 'contactrequest',
+                      'institution', 'membershipagreement', 'organization',
+                      'partner', 'partnerevent', 'partnersattachment',
+                      'prospectivecontact', 'prospectivepartner', 'prospectivepartnerevent']:
+        content_type = ContentType.objects.get(
+            model=modelname,
+            app_label='partners',
+        )
+        Permission.objects.filter(
+            content_type=content_type,
+            codename__in=('add_' + modelname, 'change_' + modelname, 'delete_' + modelname),
+        ).delete()
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('partners', '0024_auto_20190301_1638'),
+    ]
+
+    operations = [
+        migrations.RunPython(delete_partner_groups,
+                             reverse_code=migrations.RunPython.noop),
+        migrations.RunPython(delete_partner_permissions,
+                             reverse_code=migrations.RunPython.noop),
+        migrations.RunPython(delete_model_permissions,
+                             reverse_code=migrations.RunPython.noop),
+    ]
diff --git a/scipost/management/commands/add_groups_and_permissions.py b/scipost/management/commands/add_groups_and_permissions.py
index 51d5e5a1d..0fb5363de 100644
--- a/scipost/management/commands/add_groups_and_permissions.py
+++ b/scipost/management/commands/add_groups_and_permissions.py
@@ -7,7 +7,6 @@ from django.core.management.base import BaseCommand
 from django.contrib.auth.models import Group, Permission
 from django.contrib.contenttypes.models import ContentType
 
-from partners.models import Contact
 from scipost.models import Contributor, DraftInvitation
 from submissions.models import Report
 
@@ -36,9 +35,6 @@ class Command(BaseCommand):
 
         OrgContacts, created = Group.objects.get_or_create(name='Organization Contacts')
 
-        PartnersAdmin, created = Group.objects.get_or_create(name='Partners Administrators')
-        PartnersOfficers, created = Group.objects.get_or_create(name='Partners Officers')
-        PartnerAccounts, created = Group.objects.get_or_create(name='Partners Accounts')
 
         # Create Permissions
         content_type = ContentType.objects.get_for_model(Contributor)
@@ -57,28 +53,6 @@ class Command(BaseCommand):
             name='Can view ContactRole list',
             content_type=content_type)
 
-        # Supporting Partners
-        can_manage_SPB, created = Permission.objects.get_or_create(
-            codename='can_manage_SPB',
-            name='Can manage Supporting Partners Board',
-            content_type=content_type)
-        can_email_prospartner_contact, created = Permission.objects.get_or_create(
-            codename='can_email_prospartner_contact',
-            name='Can email Prospective Partner Contact',
-            content_type=content_type)
-        can_read_partner_page, created = Permission.objects.get_or_create(
-            codename='can_read_partner_page',
-            name='Can read Prospective Partner personal page',
-            content_type=content_type)
-        can_view_partners, created = Permission.objects.get_or_create(
-            codename='can_view_partners',
-            name='Can view Partner details of all Partners',
-            content_type=content_type)
-        can_view_own_partner_details, created = Permission.objects.get_or_create(
-            codename='can_view_own_partner_details',
-            name='Can view (its own) partner details',
-            content_type=content_type)
-
         # Registration and invitations
         can_manage_contributors, created = Permission.objects.get_or_create(
             codename='can_manage_contributors',
@@ -494,26 +468,5 @@ class Command(BaseCommand):
             can_view_contactrole_list,
             ])
 
-        PartnersAdmin.permissions.set([
-            can_manage_organizations,
-            can_read_partner_page,
-            can_view_own_partner_details,
-            can_manage_SPB,
-            can_email_prospartner_contact,
-            can_view_partners,
-        ])
-
-        PartnersOfficers.permissions.set([
-            can_read_partner_page,
-            can_view_own_partner_details,
-            can_manage_SPB,
-            can_view_partners,
-        ])
-
-        PartnerAccounts.permissions.set([
-            can_read_partner_page,
-            can_view_own_partner_details,
-        ])
-
         if verbose:
             self.stdout.write(self.style.SUCCESS('Successfully created groups and permissions.'))
-- 
GitLab