Repository navigation
Conversation
This was referenced Nov 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
A deployment can keep uploads outside the release tree while exposing each upload type through a site-side symlink. The dashboard currently reports the configured shared root as invalid. More seriously, the media browser loses the
file_groupskey for files outsidefilemanager_pathand treats an unresolved key as public.This targets
3.6.xand changes only the browser access helpers, browser guards, dashboard diagnostics and regression tests.Changes
assets/images/privatewhen the configured browser URL identifies a site-side directory whose real path exactly matches the physical type root.use_udpermsis enabled, covering listings, direct reads, writes, recursive reads, descendant checks and inert link metadata.filemanager_pathindependently instead of accidentally readingrb_base_dir.Verification
vendor/bin/pest tests/Unit/Security tests/Unit/SystemSettingPathNormalizerTest.php— 1116 passed, 8 skipped, 3884 assertions.aclRoot()cached in a local variable while retaining the site-wide-root requirement.The local fixture executes the actual dashboard include and browser guards against temporary release/shared directories and SQLite group restrictions. The unmodified 3.6 browser allows a non-member to read the restricted fixture file; the patched browser refuses it while allowing the group member. It also verifies stable keys across releases and personal roots, new-file paths, directory listings, direct access, recursive reads, refusal logging, URL mapping, device names and thumbnail symlink containment.
Compatibility
With group permissions enabled, a non-admin using an external root without a verifiable site-side filesystem alias now receives a refusal rather than public access. Existing ACL rows are retained; there is no database migration or dependency update. Production has not been changed.
Local before/after proof
Local reproduction only: dashboard messages come from the real configuration-check include; the access results come from the real browser guards. No production data is shown.