From b4eb6e8076f79e93c6553be8a9828715fed1df30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Jes=C3=BAs=20Pe=C3=B1a=20Rodr=C3=ADguez?= Date: Tue, 10 Dec 2024 10:45:09 +0100 Subject: [PATCH] feat(rbac): add permission_state field to role serializer --- api/src/backend/api/filters.py | 2 +- api/src/backend/api/v1/serializers.py | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/api/src/backend/api/filters.py b/api/src/backend/api/filters.py index 05d9a802a3..a7912b0d14 100644 --- a/api/src/backend/api/filters.py +++ b/api/src/backend/api/filters.py @@ -502,7 +502,7 @@ class RoleFilter(FilterSet): if value == "unlimited": return queryset.filter(q_all_true) - elif value == "nopermissions": + elif value == "none": return queryset.filter(q_all_false) elif value == "limited": return queryset.exclude(q_all_true | q_all_false) diff --git a/api/src/backend/api/v1/serializers.py b/api/src/backend/api/v1/serializers.py index f80959bf88..05fc1ccece 100644 --- a/api/src/backend/api/v1/serializers.py +++ b/api/src/backend/api/v1/serializers.py @@ -1278,6 +1278,27 @@ class RoleSerializer(RLSSerializer, BaseWriteSerializer): many=True, queryset=ProviderGroup.objects.all() ) + permission_state = serializers.SerializerMethodField() + + def get_permission_state(self, obj): + permission_fields = [ + "manage_users", + "manage_account", + "manage_billing", + "manage_providers", + "manage_integrations", + "manage_scans", + ] + + values = [getattr(obj, field) for field in permission_fields] + + if all(values): + return "unlimited" + elif not any(values): + return "none" + else: + return "limited" + def validate(self, attrs): if Role.objects.filter(name=attrs.get("name")).exists(): raise serializers.ValidationError( @@ -1306,6 +1327,7 @@ class RoleSerializer(RLSSerializer, BaseWriteSerializer): "manage_providers", "manage_integrations", "manage_scans", + "permission_state", "unlimited_visibility", "inserted_at", "updated_at",