From 57721225b9df4c07e96ca232235ab94f1b5421b0 Mon Sep 17 00:00:00 2001 From: GareArc Date: Mon, 26 Jan 2026 15:38:46 -0800 Subject: [PATCH] fix: remove user_id filter when clearing default provider (enterprise only) When setting a new default credential in enterprise mode, the code was only clearing is_default for credentials matching the current user_id. This caused issues when: 1. Enterprise credential A (synced with system user_id) was default 2. User sets local credential B as default 3. A still had is_default=true (different user_id) 4. Both A and B were considered defaults The fix removes user_id from the filter only for enterprise deployments, since enterprise credentials may have different user_id than local ones. Non-enterprise behavior is unchanged to avoid breaking existing setups. Fixes EE-1511 --- api/services/tools/builtin_tools_manage_service.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/api/services/tools/builtin_tools_manage_service.py b/api/services/tools/builtin_tools_manage_service.py index 6797a67dde..7afbae92b0 100644 --- a/api/services/tools/builtin_tools_manage_service.py +++ b/api/services/tools/builtin_tools_manage_service.py @@ -417,9 +417,17 @@ class BuiltinToolManageService: raise ValueError("provider not found") # clear default provider - session.query(BuiltinToolProvider).filter_by( - tenant_id=tenant_id, user_id=user_id, provider=provider, is_default=True - ).update({"is_default": False}) + if dify_config.ENTERPRISE_ENABLED: + # Enterprise: clear ALL defaults for this provider in the tenant + # (regardless of user_id, since enterprise credentials may have different user_id) + session.query(BuiltinToolProvider).filter_by( + tenant_id=tenant_id, provider=provider, is_default=True + ).update({"is_default": False}) + else: + # Non-enterprise: only clear defaults for the current user + session.query(BuiltinToolProvider).filter_by( + tenant_id=tenant_id, user_id=user_id, provider=provider, is_default=True + ).update({"is_default": False}) # set new default provider target_provider.is_default = True