How can I block an app from accessing my contacts? An app that has access to the list of contacts is capable, without further notice, to upload that information to a server. (If it has internet access, that is, but most do.)

I am concerned of the breach of trust to my contacts that this entails. 

For example, someone on my contacts list may have gone into some trouble to remain unlisted in any phone book, and yet their phone number could become near-public, depending on the privacy policy of the app, which I, like many, never bother to read.

I'm here not even referring to app(s) that exist with the sole and express intent of making contact lists public.

Is there any way to be in control by choosing whether a given app has access to my contacts list, similar to how an app can have access to notifications, but I can disable its access to notifications while continuing to use the app?

To be clear, a messenger app becomes meaningless if it doesn't have access to contacts, but, for example, an app showing me the nearest grocer or coffee shop has no need to access my contacts. Please do not suggest "Just don't install an app that gratuitously asks for permission to access contacts." Doing so leaves users in the stone age. I'd like to be able to use any app, but to remain in charge.

Edit:

For comparison, here is a link to a companion question for iOS.
Here a step by step guide working since Android 6.0+ (Screenshots from Android 7.1.1).


Go so Settings via the gear wheel icon
Select Apps
Select the gear wheel icon
Select App permissions
Select the permission of your choice
Disable the app's permission