diff --git a/TeamForge/settings.py b/TeamForge/settings.py index f7ffba2..da3e0e5 100644 --- a/TeamForge/settings.py +++ b/TeamForge/settings.py @@ -130,6 +130,11 @@ STATICFILES_DIRS = [BASE_DIR / "static"] MEDIA_URL = "media/" MEDIA_ROOT = BASE_DIR / "media" +AUTHENTICATION_BACKENDS = [ + "rules.permissions.ObjectPermissionBackend", + "django.contrib.auth.backends.ModelBackend", +] + CONSTANCE_BACKEND = "constance.backends.database.DatabaseBackend" CONSTANCE_CONFIG = { "TF_CLUB_NAME": (config("TF_CLUB_NAME", default="TeamForge", cast=str), "Club Name", str), diff --git a/members/apps.py b/members/apps.py index 85a1306..e5e55eb 100644 --- a/members/apps.py +++ b/members/apps.py @@ -3,3 +3,7 @@ from django.apps import AppConfig class MembersConfig(AppConfig): name = "members" + + def ready(self): + # noinspection PyUnusedImports + import members.signals diff --git a/members/signals.py b/members/signals.py new file mode 100644 index 0000000..7b5b0c8 --- /dev/null +++ b/members/signals.py @@ -0,0 +1,19 @@ +import secrets + +from django.contrib.auth import get_user_model +from django.db.models.signals import post_save +from django.dispatch import receiver + +from .models import Member + +User = get_user_model() + + +@receiver(post_save, sender=User) +def create_member_profile(instance, *args, **kwargs) -> None: + """Creates a Member profile for a newly created user.""" + member, created = Member.objects.get_or_create(user=instance) + + if not member.access_token: + member.access_token = secrets.token_urlsafe(64) + member.save(update_fields=["access_token"]) diff --git a/members/tests.py b/members/tests.py index 7ce503c..0aa0500 100644 --- a/members/tests.py +++ b/members/tests.py @@ -1,3 +1,30 @@ +from django.contrib.auth import get_user_model +from django.contrib.auth.models import Permission from django.test import TestCase -# Create your tests here. +User = get_user_model() + + +class MembersTestCase(TestCase): + def setUp(self): + self.user_a = User.objects.create(username="user_a", first_name="User", last_name="A", email="user_a@test.com") + + def testMemberName(self): + self.assertEqual(str(self.user_a.member), "User A") + + def testMemberCreation(self): + self.assertTrue(hasattr(self.user_a, "member")) + + def testMemberManager(self): + self.assertFalse(self.user_a.has_perm("members.member_manager")) + self.assertFalse(self.user_a.has_perm("members.add_member")) + self.assertFalse(self.user_a.is_superuser) + + member_manager_permission = Permission.objects.get(codename="member_manager") + + self.user_a.user_permissions.add(member_manager_permission) + self.user_a = User.objects.get(pk=self.user_a.pk) + + self.assertTrue(self.user_a.has_perm("members.member_manager")) + self.assertTrue(self.user_a.has_perm("members.add_member")) + self.assertFalse(self.user_a.is_superuser) diff --git a/members/views.py b/members/views.py deleted file mode 100644 index 91ea44a..0000000 --- a/members/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here.