How to allow per user protected branches access in GitLab?
Those types of permissions do not exist in GitLab.
As an alternative approach: you can make the user unable to commit to the main repository and then use the Project forking workflow allowing them to fork the repository to their own namespace which they can do their work on and then submit a pull request. Similar to the workflow that GitHub follows.