From 4cd70ef182493878a1d5d9f70483b80c999d780c Mon Sep 17 00:00:00 2001 From: henrikek Date: Tue, 9 Jun 2026 23:32:35 +0200 Subject: [PATCH] Add param "all_groups" to api/me/ --- ESSArch_Core/auth/backends.py | 13 +++++++++++++ ESSArch_Core/auth/serializers.py | 15 +++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/ESSArch_Core/auth/backends.py b/ESSArch_Core/auth/backends.py index cd77d7f09..ec59f7a3f 100644 --- a/ESSArch_Core/auth/backends.py +++ b/ESSArch_Core/auth/backends.py @@ -56,6 +56,19 @@ def get_all_permissions(self, user_obj, obj=None): *_get_permission_objs(user_obj, go_obj).annotate(full_name=full_name).values_list('full_name') ))) + def get_all_permissions_for_group(self, user_obj, group): + perms = Permission.objects.filter( + roles__in=get_user_roles(user_obj, group) + ) + + return perms.annotate( + full_name=Concat( + F('content_type__app_label'), + Value('.'), + F('codename') + ) + ).values_list('full_name', flat=True) + def has_perm(self, user_obj, perm, obj=None): if '.' in perm and obj is not None: app_label, perm = perm.split('.') diff --git a/ESSArch_Core/auth/serializers.py b/ESSArch_Core/auth/serializers.py index 412b60a44..ee650393a 100644 --- a/ESSArch_Core/auth/serializers.py +++ b/ESSArch_Core/auth/serializers.py @@ -33,6 +33,7 @@ from rest_framework import exceptions, serializers from rest_framework_simplejwt.serializers import TokenObtainPairSerializer +from ESSArch_Core.auth.backends import GroupRoleBackend from ESSArch_Core.auth.models import Group, Notification, UserProfile from ESSArch_Core.auth.util import get_organization_groups @@ -147,6 +148,20 @@ def get_url(self, obj): return self.context['request'].build_absolute_uri(reverse('me')) def get_permissions(self, obj): + request = self.context['request'] + + if request.query_params.get('all_groups') == 'true': + perms = set() + + backend = GroupRoleBackend() + + for group in get_organization_groups(obj): + perms.update( + backend.get_all_permissions_for_group(obj, group) + ) + + return sorted(perms) + return obj.get_all_permissions() def get_organizations(self, user):