Page MenuHomePhabricator

Fix a complicated object caching issue with the policy filter
ClosedPublic

Authored by epriestley on Nov 11 2016, 9:28 PM.

Details

Summary

Fixes T11853. To set this up:

  • Create "Project A".
  • Join "Project A".
  • Create a subproject, "Project A Subproject 1".
    • This causes Project A to become a parent project.
    • This moves you to be a member of "Project A Subproject 1" instead of "Project A" directly.
  • Create another subproject, "Project A Subproject 2".
    • Do not join this subproject.
  • Set the second subproject's policy to "Visible To: Members of Project A".
  • Try to edit the second subproject.

Before this change, this fails:

  • When querying projects, we sometime try to skip loading the viewer's membership in ancestor projects as a small optimization.
  • Via PhabricatorExtendedPolicyInterface, we may then return the parent project to the policy filter for extended checks.
  • The PolicyFilter has an optimization: if we're checking an object, and we already have that object, we can just use the object we already have. This is common and useful.
  • However, in this case it causes us to reuse an incomplete object (an object without proper membership information). We fail a policy check which we should pass.

Instead, don't skip loading the viewer's membership in ancestor projects.

Test Plan
  • Did all that stuff above.
  • Could edit the subproject.
  • Ran arc unit --everything.

Diff Detail

Repository
rP Phabricator
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

epriestley retitled this revision from to Fix a complicated object caching issue with the policy filter.
epriestley updated this object.
epriestley edited the test plan for this revision. (Show Details)
epriestley added a reviewer: chad.
chad edited edge metadata.
This revision is now accepted and ready to land.Nov 11 2016, 9:38 PM
This revision was automatically updated to reflect the committed changes.