When do you hide vs disable a control?

In a large stateful application, on every screen the user can be doing work and encounter functionality they do not have access to. There are two categories of functionality that is not available:

  1. The state of the data and controls on the screen is not ready
  2. The user’s role was not given access to the capability.

When creating the user interface the control should be disabled if the state is not ready. If the user or system can change the state of the user interface to get access to the control then it should only be disabled. This provides a little visual indicator to the user that the field is there if the state changes.

However, if the user does not have permissions to access the functionality it should not appear on the screen at all. Why have it there if the user cannot use it at all. The functionality just becomes visual noise.