fix(acl): scope resolution should be per window #9068
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The ACL resolution has a bug where it is grouping all scopes per command and execution context (the allowed_commands map key) and ignoring the capability window. This PR changes the resolution to only use the command name as map key, and use a vector to collect the resolved permissions (windows/webviews/context/scope).
This comes with a small breaking change because the scope is now resolved at runtime instead of being merged at compile time. Parsing via the ScopeObject trait is still only done once for each block of scope, but we now push copies of each scope entry (now stored as Arc) to the returned scope value. Previously an Arc<Vec> was used which isn't enough to copy the scopes around now that they are isolated to be referenced per window/webview.