You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(permission-groups): gate selector execution on allowedIntegrations, apply the personal-key policy on v2 chat
Three cubic findings on the enforcement PR.
`POST /api/selectors/execute` reaches a provider's API with the caller's
credential, so it is a use of the integration and not a neutral picker. The
authorization funnel cannot apply `allowedIntegrations` because it never sees
which integration a selector key stands for, so the decision is asserted from
the use case, after credential binding and ahead of the provider call. The
integration identity comes from the selector attachment's declared OAuth
services, narrowed by the resolved credential's provider id so a two-service
selector is judged as the half the caller actually reaches.
`/api/v2/chat` only ever runs for a personal API key, and `admitV2Request`
authenticates without authorizing, so neither half of the funnel's personal-key
policy applied there. Both now run after the workspace access check, the group
half through the shared `requirePersonalApiKeysAllowed`.
The raw copilot chat route's `copilot.use` refusal now renders through
`capabilityRefusalResponse`, so it carries the same detail code as every other
capability refusal.
0 commit comments