diff --git a/server/apps/core/admin.py b/server/apps/core/admin.py index 50288e80..2f4a1b7a 100644 --- a/server/apps/core/admin.py +++ b/server/apps/core/admin.py @@ -5,7 +5,7 @@ from apps.profile.models import Profile, RcrainfoProfile, RcrainfoSiteAccess -from .models import Permission, Role, TrakUser +from .models import GroupPermission, TrakUser, UserPermission class HiddenListView(admin.ModelAdmin): @@ -73,5 +73,5 @@ def api_user(self, profile: RcrainfoProfile) -> bool: admin.site.register(Profile) admin.site.unregister(DRFToken) -admin.site.register(Permission) -admin.site.register(Role) +admin.site.register(UserPermission) +admin.site.register(GroupPermission) diff --git a/server/apps/core/migrations/0005_remove_role_permissions_delete_permission_and_more.py b/server/apps/core/migrations/0005_remove_role_permissions_delete_permission_and_more.py new file mode 100644 index 00000000..c8faeec0 --- /dev/null +++ b/server/apps/core/migrations/0005_remove_role_permissions_delete_permission_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 5.0.6 on 2024-07-22 20:03 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0004_grouppermission_userpermission'), + ] + + operations = [ + migrations.RemoveField( + model_name='role', + name='permissions', + ), + migrations.DeleteModel( + name='Permission', + ), + migrations.DeleteModel( + name='Role', + ), + ] diff --git a/server/apps/core/models.py b/server/apps/core/models.py index e34f0681..d7539bc1 100644 --- a/server/apps/core/models.py +++ b/server/apps/core/models.py @@ -3,7 +3,6 @@ from django.contrib.auth.models import AbstractUser, Group from django.contrib.auth.models import Permission as DjangoPermission from django.db import models -from django.utils.translation import gettext_lazy as _ from guardian.models import GroupObjectPermissionAbstract, UserObjectPermissionAbstract @@ -22,49 +21,6 @@ class Meta: ) -class Permission(DjangoPermission): - """Haztrak proxy permission model used for our custom object level permissions.""" - - class Meta: - proxy = True - verbose_name = "Permission" - verbose_name_plural = "Permissions" - ordering = ["name"] - - @property - def app_label(self): - return self.content_type.app_label - - @property - def model_name(self): - return self.content_type.model - - def __str__(self): - return f"{self.content_type.name} | {self.name}" - - -class Role(models.Model): - """A job/function within the system that can assigned to users to grant them permissions.""" - - class Meta: - verbose_name = _("Role") - verbose_name_plural = _("Roles") - ordering = ["name"] - - name = models.CharField( - _("name"), - max_length=150, - unique=True, - ) - permissions = models.ManyToManyField( - Permission, - verbose_name=_("permissions"), - ) - - def __str__(self): - return f"{self.name}" - - class UserPermission(UserObjectPermissionAbstract): """ User object permission model for Haztrak. diff --git a/server/apps/core/tests/conftest.py b/server/apps/core/tests/conftest.py index babf8a27..ab40962d 100644 --- a/server/apps/core/tests/conftest.py +++ b/server/apps/core/tests/conftest.py @@ -2,10 +2,8 @@ from typing import Dict, List, Optional import pytest -from django.contrib.contenttypes.models import ContentType from faker import Faker -from apps.core.models import Permission from apps.rcrasite.models import RcraSiteType @@ -42,23 +40,3 @@ def create_quicker_sign( } return create_quicker_sign - - -@pytest.fixture -def permission_factory(faker: Faker): - """ - Factory for creating dynamic permission data - """ - - def create_permission( - name: str = faker.word(), - content_type_id: int = faker.random_int(min=1), - ) -> Permission: - content_type = ContentType.objects.create(app_label=faker.word(), model=faker.word()) - return Permission.objects.create( - name=name, - content_type=content_type, - content_type_id=content_type_id, - ) - - return create_permission diff --git a/server/apps/core/tests/test_models.py b/server/apps/core/tests/test_models.py deleted file mode 100644 index c00a0baf..00000000 --- a/server/apps/core/tests/test_models.py +++ /dev/null @@ -1,42 +0,0 @@ -import pytest -from django.contrib.contenttypes.models import ContentType - -from apps.core.models import Permission, Role - - -class TestPermissionModel: - mock_app_label = "test_app" - mock_model = "test_model" - - @pytest.fixture - def mock_content_type(self): - return ContentType.objects.create(app_label=self.mock_app_label, model=self.mock_model) - - @pytest.mark.django_db - def test_saves_new_permissions(self, mock_content_type): - permission_name = "test_permission" - permission = Permission.objects.create( - content_type=mock_content_type, content_type_id=1, name=permission_name - ) - - saved_permission = Permission.objects.get(name=permission_name) - - assert saved_permission.name == permission_name - assert saved_permission.id == permission.id - - -class TestRoleModel: - @pytest.mark.django_db - def test_role_with_multiple_permissions(self, permission_factory): - permission1 = permission_factory(content_type_id=1) - permission2 = permission_factory(content_type_id=2) - role = Role.objects.create(name="test_role") - role.permissions.add(permission1, permission2) - assert role.permissions.count() == 2 - assert permission1 in role.permissions.all() - assert permission2 in role.permissions.all() - - @pytest.mark.django_db - def test_role_str_representation(self): - role = Role.objects.create(name="test_role") - assert str(role) == "test_role"