I think letting the user decide on permissions works in practice only if (i) There is a good chance that an average user would understand the tradeoffs of giving different permissions to different apps (ii) A large majority of users are expected to give that permission to the app under reasonable circumstances.
If an average user does not understand the tradeoffs of giving permissions to an app, then the operating system may as well do it on behalf of the user. I think this is a common problem since an average user probably clicks arbitrarily on the permissions dialog.
Similarly, if a permission is perceived to be not useful enough by most of the users, then there is no point in even having that in the ecosystem.