This prevents somebody who can see secret channels from joining a sidebar when they aren't the member of its parent.
Because of how our logic around containingThreadID works, it's important that we maintain the property that "if a user is a member of X thread with containingThreadID, it is also a member of containingThreadID.
As such, the permissions system is structured to always assign sidebar JOIN_THREAD permissions from the sidebar's parent.
In other words, we should never see JOIN_THREAD and DESCENDANT together without also having TOP_LEVEL (or OPEN_TOP_LEVEL).
Depends on D13017