How can I get Drupal to hide menu items that user does not have permission for?
Drupal does this using access callback from the menu items.

In the example given:


This was working.
The Application had TRUE for the access callback. As this was not my application, I used hook_menu_alter in my own module to set the access callback for this argument to my own function. This then checked the permission and returned true/false.
The Contact Access module requires rebuilding permissions (/admin/reports/status/rebuild) after any changes.