More flexible branch-level access control
<!--IssueSummary start-->
<details>
<summary>
Everyone can contribute. [Help move this issue forward](https://handbook.gitlab.com/handbook/marketing/developer-relations/contributor-success/community-contributors-workflows/#contributor-links) while earning points, leveling up and collecting rewards.
</summary>
- [Close this issue](https://contributors.gitlab.com/manage-issue?action=close&projectId=278964&issueIid=488832)
</details>
<!--IssueSummary end-->
<!--This template is a great use for issues that are feature::additions or technical tasks for larger issues.-->
### Proposal
GitLab supports specifying roles/users who can merge or push to branches (a specific branch or multiple branches matching a wildcard) using the [protected branch](https://docs.gitlab.com/ee/user/project/repository/branches/protected.html) feature.
{width=922 height=315}
A customer has a demand to specify more flexible branch-level access control. This includes the following.
* Only the specific users/roles can read branches
* Only the specific users/roles can perform force push, but others only can perform non-force push to branches
* Only the specific users/roles can open merge request to/from branches
* Other flexible access controls, such as those supported by [Gerrit](https://gerrit-review.googlesource.com/Documentation/access-control.html)
Link to request (Internal): https://gitlab.zendesk.com/agent/tickets/566188
issue