diff --git a/api/src/backend/api/rls.py b/api/src/backend/api/rls.py index c7b15a82dd..6807c8d419 100644 --- a/api/src/backend/api/rls.py +++ b/api/src/backend/api/rls.py @@ -2,8 +2,7 @@ from typing import Any from uuid import uuid4 from django.core.exceptions import ValidationError -from django.db import DEFAULT_DB_ALIAS -from django.db import models +from django.db import DEFAULT_DB_ALIAS, models from django.db.backends.ddl_references import Statement, Table from api.db_utils import DB_USER, POSTGRES_TENANT_VAR @@ -45,10 +44,7 @@ class RowLevelSecurityConstraint(models.BaseConstraint): FOR {statement} TO %(db_user)s {clause} ( - CASE - WHEN current_setting('%(tenant_setting)s', True) IS NULL THEN FALSE - ELSE %(field_column)s = current_setting('%(tenant_setting)s')::uuid - END + (SELECT current_setting('%(tenant_setting)s', True)::uuid) = %(field_column)s ); """ @@ -131,7 +127,9 @@ class RowLevelSecurityConstraint(models.BaseConstraint): path, _, kwargs = super().deconstruct() return (path, (self.target_field,), kwargs) - def validate(self, model, instance, exclude=None, using=DEFAULT_DB_ALIAS): # noqa: F841 + def validate( + self, model, instance, exclude=None, using=DEFAULT_DB_ALIAS + ): # noqa: F841 if not hasattr(instance, "tenant_id"): raise ValidationError(f"{model.__name__} does not have a tenant_id field.")