Skip to content

Commit

Permalink
♻️ [#390] Refactor endpoint to use new permissions
Browse files Browse the repository at this point in the history
  • Loading branch information
SilviaAmAm committed Oct 1, 2024
1 parent ba0f3b7 commit 9c4ab13
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 7 deletions.
33 changes: 30 additions & 3 deletions backend/src/openarchiefbeheer/accounts/api/serializers.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,49 @@
from django.utils.translation import gettext_lazy as _

from drf_spectacular.utils import extend_schema_field
from rest_framework import serializers

from ..models import User


class RoleSerializer(serializers.Serializer):
can_start_destruction = serializers.BooleanField()
can_review_destruction = serializers.BooleanField()
can_review_final_list = serializers.BooleanField()

class Meta:
fields = (
"name",
"can_start_destruction",
"can_review_destruction",
"can_review_final_list",
"can_view_case_details",
)


class UserSerializer(serializers.ModelSerializer):
role = RoleSerializer()
role = serializers.SerializerMethodField(
help_text=_("The role of the user within the application logic."),
allow_null=True,
)

class Meta:
model = User
fields = ("pk", "username", "first_name", "last_name", "email", "role")

@extend_schema_field(RoleSerializer)
def get_role(self, user: User) -> dict | None:
serializer = RoleSerializer(
data={
"can_review_destruction": user.has_perm(
"accounts.can_review_destruction"
),
"can_start_destruction": user.has_perm(
"accounts.can_start_destruction"
),
"can_review_final_list": user.has_perm(
"accounts.can_review_final_list"
),
}
)
serializer.is_valid()

return serializer.data
16 changes: 15 additions & 1 deletion backend/src/openarchiefbeheer/accounts/managers.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
from django.contrib.auth.models import BaseUserManager
from typing import TYPE_CHECKING

from django.contrib.auth.models import BaseUserManager, Group
from django.db.models import QuerySet

if TYPE_CHECKING:
from .models import User


class UserManager(BaseUserManager):
Expand Down Expand Up @@ -32,3 +38,11 @@ def create_superuser(self, username, email, password, **extra_fields):
raise ValueError("Superuser must have is_superuser=True.")

return self._create_user(username, email, password, **extra_fields)

def reviewers(self) -> QuerySet["User"]:
reviewers_group = Group.objects.get(name="Reviewer")
return reviewers_group.user_set.all()

def archivists(self) -> QuerySet["User"]:
archivists_group = Group.objects.get(name="Archivist")
return archivists_group.user_set.all()
3 changes: 0 additions & 3 deletions frontend/src/lib/format/user.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,5 @@ export function formatUser(
? `${user.firstName} ${user.lastName}${userNameSuffix}`
: user.username;

if (showRole && user.role.name) {
return `${displayName} (${user.role.name})`;
}
return displayName;
}

0 comments on commit 9c4ab13

Please sign in to comment.