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
F14054901: D7309.diff
Sat, Nov 16, 6:15 AM
F14043292: D7309.diff
Tue, Nov 12, 9:01 AM
F14027241: D7309.diff
Fri, Nov 8, 6:03 AM
Unknown Object (File)
Fri, Oct 25, 9:02 AM
Unknown Object (File)
Tue, Oct 22, 10:09 PM
Unknown Object (File)
Oct 20 2024, 10:45 PM
Unknown Object (File)
Oct 18 2024, 8:56 AM
Unknown Object (File)
Oct 15 2024, 8:31 PM
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. :)