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