Page MenuHomePhabricator

Fix some file policy issues and add a "Query Workspace"
ClosedPublic

Authored by epriestley on Oct 14 2013, 7:58 PM.
Tags
None
Referenced Files
F16312594: D7309.diff
Sun, Jun 15, 3:41 PM
Unknown Object (File)
Sat, Jun 7, 3:01 AM
Unknown Object (File)
Fri, Jun 6, 11:27 PM
Unknown Object (File)
Wed, May 28, 9:35 AM
Unknown Object (File)
Tue, May 27, 10:04 PM
Unknown Object (File)
May 6 2025, 2:23 AM
Unknown Object (File)
Apr 28 2025, 5:53 PM
Unknown Object (File)
Apr 27 2025, 7:06 AM
Subscribers

Details

Summary

Ref T603. Several issues here:

  1. Currently, FileQuery does not actually respect object attachment edges when doing policy checks. Everything else works fine, but this was missing an array_keys().
  2. Once that's fixed, we hit a bunch of recursion issues. For example, when loading a User we load the profile picture, and then that loads the User, and that loads the profile picture, etc.
  3. Introduce a "Query Workspace", which holds objects we know we've loaded and know we can see but haven't finished filtering and/or attaching data to. This allows subqueries to look up objects instead of querying for them.
    • We can probably generalize this a bit to make a few other queries more efficient. Pholio currently has a similar (but less general) "mock cache". However, it's keyed by ID instead of PHID so it's not easy to reuse this right now.

This is a bit complex for the problem being solved, but I think it's the cleanest approach and I believe the primitive will be useful in the future.

Test Plan

Looked at pastes, macros, mocks and projects as a logged-in and logged-out user.

Diff Detail

Lint
Lint Skipped
Unit
Tests Skipped

Event Timeline

epriestley updated this revision to Unknown Object (????).Oct 14 2013, 8:00 PM
  • Restore an if ($projects) which I was overzealous in removing.

reminds me of the good ole days:

$GLOBALS['CACHE'][$key] = $value;

Yeahhhhhhhhhhhhhh, I've tried to use lots of fancy words so it's hard to tell. :)