summaryrefslogtreecommitdiff
path: root/postgresqleu
diff options
context:
space:
mode:
Diffstat (limited to 'postgresqleu')
-rw-r--r--postgresqleu/settings.py2
-rw-r--r--postgresqleu/util/apps.py23
-rw-r--r--postgresqleu/util/auth.py11
3 files changed, 35 insertions, 1 deletions
diff --git a/postgresqleu/settings.py b/postgresqleu/settings.py
index 36c643c5..dd79a3c9 100644
--- a/postgresqleu/settings.py
+++ b/postgresqleu/settings.py
@@ -105,7 +105,7 @@ INSTALLED_APPS = [
'postgresqleu.mailqueue',
'postgresqleu.invoices',
'postgresqleu.accounting',
- 'postgresqleu.util',
+ 'postgresqleu.util.apps.UtilAppConfig',
'postgresqleu.trustlypayment',
'postgresqleu.braintreepayment',
'postgresqleu.transferwise',
diff --git a/postgresqleu/util/apps.py b/postgresqleu/util/apps.py
new file mode 100644
index 00000000..69d00264
--- /dev/null
+++ b/postgresqleu/util/apps.py
@@ -0,0 +1,23 @@
+from django.apps import AppConfig, apps
+from django.db.models.signals import post_migrate
+from django.db import transaction
+
+from .auth import PERMISSION_GROUPS
+
+
+def handle_post_migrate(sender, **kwargs):
+ # Ensure all permissions groups exist
+ # (yes, we have a hardcoded list..)
+ with transaction.atomic():
+ Group = apps.get_model('auth', 'Group')
+ for g in PERMISSION_GROUPS:
+ g, created = Group.objects.get_or_create(name=g)
+ if created:
+ print("Created access group {0}".format(g))
+
+
+class UtilAppConfig(AppConfig):
+ name = 'postgresqleu.util'
+
+ def ready(self):
+ post_migrate.connect(handle_post_migrate, sender=self)
diff --git a/postgresqleu/util/auth.py b/postgresqleu/util/auth.py
index bdb5bd7d..d6a05eba 100644
--- a/postgresqleu/util/auth.py
+++ b/postgresqleu/util/auth.py
@@ -5,10 +5,21 @@ from django.conf import settings
import urllib.parse
+PERMISSION_GROUPS = (
+ 'Invoice managers',
+ 'News administrators',
+ 'Membership administrators',
+ 'Election administrators',
+)
+
+
def authenticate_backend_group(request, groupname):
if not request.user.is_authenticated:
raise RedirectException("{0}?{1}".format(settings.LOGIN_URL, urllib.parse.urlencode({'next': request.build_absolute_uri()})))
+ if groupname not in PERMISSION_GROUPS:
+ raise PermissionDenied("Group name not known")
+
if request.user.is_superuser:
return
if request.user.groups.filter(name=groupname).exists():