From 5fd1af7559e12745130d0812bfbf75a63e08aca7 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:33:26 +0100 Subject: [PATCH] feat(rbac): add permission_state filter --- api/src/backend/api/filters.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/api/src/backend/api/filters.py b/api/src/backend/api/filters.py index 0bf6121996..05d9a802a3 100644 --- a/api/src/backend/api/filters.py +++ b/api/src/backend/api/filters.py @@ -485,6 +485,29 @@ class UserFilter(FilterSet): class RoleFilter(FilterSet): inserted_at = DateFilter(field_name="inserted_at", lookup_expr="date") updated_at = DateFilter(field_name="updated_at", lookup_expr="date") + permission_state = CharFilter(method="filter_permission_state") + + def filter_permission_state(self, queryset, name, value): + permission_fields = [ + "manage_users", + "manage_account", + "manage_billing", + "manage_providers", + "manage_integrations", + "manage_scans", + ] + + q_all_true = Q(**{field: True for field in permission_fields}) + q_all_false = Q(**{field: False for field in permission_fields}) + + if value == "unlimited": + return queryset.filter(q_all_true) + elif value == "nopermissions": + return queryset.filter(q_all_false) + elif value == "limited": + return queryset.exclude(q_all_true | q_all_false) + else: + return queryset.none() class Meta: model = Role