Page MenuHomePhabricator

Don't put "spacePHID IN (...)" constraints in queries which will raise policy exceptions
ClosedPublic

Authored by epriestley on Jan 28 2019, 3:52 PM.
Tags
None
Referenced Files
F18616147: D20042.id47857.diff
Sun, Sep 14, 4:25 PM
F18612623: D20042.id47857.diff
Sun, Sep 14, 9:31 AM
F18600396: D20042.diff
Sat, Sep 13, 9:38 AM
F18586024: D20042.id47856.diff
Thu, Sep 11, 5:11 PM
F18566933: D20042.id.diff
Tue, Sep 9, 3:01 PM
F18531248: D20042.diff
Sun, Sep 7, 3:49 AM
F18488929: D20042.diff
Wed, Sep 3, 9:16 PM
F18175107: D20042.id47856.diff
Aug 15 2025, 8:44 PM
Subscribers
None

Details

Summary

See T13240. Ref T13242. When we're issuing a query that will raise policy exceptions (i.e., give the user a "You Shall Not Pass" dialog if they can not see objects it loads), don't do space filtering in MySQL: when objects are filtered out in MySQL, we can't distinguish between "bad/invalid ID/object" and "policy filter", so we can't raise a policy exception.

This leads to cases where viewing an object shows "You Shall Not Pass" if you can't see it for any non-Spaces reason, but "404" if the reason is Spaces.

There's no product reason for this, it's just that spacePHID IN (...) is important for non-policy-raising queries (like a list of tasks) to reduce how much application filtering we need to do.

Test Plan

Before:

$ git pull
phabricator-ssh-exec: No repository "spellbook" exists!
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

After:

$ git pull
phabricator-ssh-exec: [You Shall Not Pass: Unknown Object (Repository)] This object is in a space you do not have permission to access.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Diff Detail

Repository
rP Phabricator
Branch
space1
Lint
Lint Passed
Unit
Tests Passed
Build Status
Buildable 21710
Build 29621: Run Core Tests
Build 29620: arc lint + arc unit