dify/web/app
kota-maeda0708 c232375fd2 feat: add visibility control for plugin datasource credentials
Plugin-based datasource credentials (Notion, Jina, Firecrawl, etc.) were
implicitly shared with every workspace member. PR #35468 added the
visibility column, creator tracking and read-side filtering for datasource
providers, but left no way to actually set or change a credential's scope,
so every datasource credential stayed effectively all_team_members.

This completes the datasource side:

Backend:
- add_datasource_api_key_provider / add_datasource_oauth_provider accept
  user_id and visibility; API keys default to all_team_members, OAuth
  defaults to only_me (matching the plugin-credential philosophy)
- new update_datasource_credential_visibility (+ console endpoint) so the
  creator can switch between only_me / all_team_members / partial_members;
  only the creator (or legacy NULL-owner rows) may change the scope
- replace_partial_member_list / clear_partial_member_list helpers on
  CredentialPermissionService (caller owns the transaction)
- list_datasource_credentials returns visibility, user_id, is_editable and
  partial_member_list

Frontend:
- VisibilityModal reusing PermissionSelector, with an empty-partial-members
  guard (the backend rejects an empty list)
- "Who can use" action in the credential operator, gated on is_editable
- scope badges (only me / partial team members) on the credential item

Existing credentials keep working: the visibility column defaults to
all_team_members and legacy rows with a NULL owner are always visible.
2026-06-25 00:00:40 +09:00
..
(commonLayout) fix(web): stabilize deployment state hydration (#37818) 2026-06-23 11:07:15 +00:00
(humanInputLayout)/form/[token] fix: fix human input form logo replace (#37452) 2026-06-15 07:27:25 +00:00
(shareLayout) refactor(web): migrate shared localStorage to createLocalStorageState (#37408) 2026-06-19 13:51:45 +00:00
account refactor(web): migrate shared localStorage to createLocalStorageState (#37408) 2026-06-19 13:51:45 +00:00
activate feat(web): create system-features vertical (#36894) 2026-06-01 10:15:25 +00:00
auth/refresh feat(web): refine onboarding UI (#37433) 2026-06-15 08:47:15 +00:00
components feat: add visibility control for plugin datasource credentials 2026-06-25 00:00:40 +09:00
device feat(web): create system-features vertical (#36894) 2026-06-01 10:15:25 +00:00
education-apply refactor(web): migrate shared localStorage to createLocalStorageState (#37408) 2026-06-19 13:51:45 +00:00
forgot-password feat(web): create system-features vertical (#36894) 2026-06-01 10:15:25 +00:00
init refactor(dify-ui): finish primitive migration from web/base/ui to @langgenius/dify-ui (#35349) 2026-04-17 08:46:11 +00:00
install fix(ui): keep loading buttons focusable (#37383) 2026-06-12 10:31:33 +00:00
oauth-callback feat: the frontend part of mcp (#22131) 2025-07-10 14:14:02 +08:00
reset-password refactor(web): migrate shared localStorage to createLocalStorageState (#37408) 2026-06-19 13:51:45 +00:00
signin refactor(web): migrate shared localStorage to createLocalStorageState (#37408) 2026-06-19 13:51:45 +00:00
signup fix(web): attach Amplitude user ID before firing registration event (#37091) 2026-06-05 06:31:27 +00:00
styles fix(web): polish onboarding main nav and preferences tab (#37844) 2026-06-24 05:46:53 +00:00
error.tsx fix(web): prefetch workspace and guard routes with contract query (#36870) 2026-05-31 14:02:00 +00:00
layout.tsx fix(web): align viewport and overlay accessibility (#37142) 2026-06-08 01:45:39 +00:00
routePrefixHandle.tsx refactor: route next/navigation through compat re-export (#33636) 2026-03-18 12:57:03 +08:00