Why are authors allowed to approve comments on their posts? How to revoke privilege?

The ability to set comment status is tied to the “edit_comment” capability, which is a meta-capability in WordPress. It maps to the “edit_post” capability, which is another meta-capability that varies depending on whether a post is published or not.

In the end, if a post is published, then edit_comment ends up mapping to “edit_published_posts” for the post_author, or “edit_others_posts” for people who are not the post author. Meaning that yes, people marked as Author have the ability to moderate comments on their own posts, but not across the board like people with the “moderate_comments” capability would.

As this is hardcoded (as all meta-caps are), you would need to add an additional filter to turn it off. It’s not something you can adjust with a role manager plugin.

A simpler way would be to make those people not Authors, but Contributors instead. As Authors already have the ability to “publish_posts” on their own, and thus add content to the site without additional approval, they are expected to be trusted users in the sense that they can add content and thus able to approve comments.

Another way would be to remove the “edit_published_posts” from the Author, but this would also disallow them from editing content once it has been published. Again, this makes sense, if they can’t be trusted to show comments, then they shouldn’t be trusted to change already published content either.

It all really depends on trust and what you want to allow people to do. The system is consistent as it is now, in terms of security.