25 lines
676 B
Python
25 lines
676 B
Python
from apps.core.visibility_registry import VISIBILITY_MAP_BY_ORG_KEY
|
|
|
|
|
|
def apply_visibility_filter_by_org_type(queryset, org):
|
|
"""
|
|
Dynamically filter queryset based on user's organization type and model.
|
|
"""
|
|
|
|
if not org:
|
|
return queryset.none()
|
|
|
|
model_name = queryset.model.__name__.lower()
|
|
|
|
if model_name not in VISIBILITY_MAP_BY_ORG_KEY:
|
|
return queryset
|
|
|
|
org_type_key = getattr(org.type, 'key', None)
|
|
visibility_field = VISIBILITY_MAP_BY_ORG_KEY[model_name].get(org_type_key)
|
|
|
|
if visibility_field is None:
|
|
return queryset
|
|
|
|
filter_kwargs = {f"{visibility_field}": org}
|
|
return queryset.filter(**filter_kwargs)
|