Identify packages as protected to prevent accidental deletion or updates
### Context
You can use the GitLab Package Registry to publish and store packages right alongside your source code and pipelines. A Developer in the respective project may publish new versions of a package using GitLab CI or the command line. However, similar to protected branches, there are many cases where only a Project Admin should be allowed to update or delete a given package.
The following features are already available to protect the release process:
* [Protected Branches](https://docs.gitlab.com/ee/user/project/protected_branches.html)
* [Protected Tags](https://docs.gitlab.com/ee/user/project/protected_tags.html)
* [Protected Environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
* [Protecting Pipeline Settings by hosting .gilab-ci.yml in a separate project](https://docs.gitlab.com/ee/user/project/pipelines/settings.html#custom-ci-configuration-path)
However, there is no way to do the same for packages. This means that we are protecting all of the components responsible for creating a package but not the output.
### Proposal
For each package manager format add configuration options for restricting all actions except read (create, update and delete) similar to the existing [Protected Branches](https://docs.gitlab.com/ee/user/project/protected_branches.html), [Protected Tags](https://docs.gitlab.com/ee/user/project/protected_tags.html) and [Protected Environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html).
#### Details
This epic will have an issue for each format and we'll prioritize them in the following order:
1. Maven
1. npm
1. PyPI
1. NuGet
1. Generic packages
1. RubyGems
1. Conan
1. Composer
1. Debian
1. Go
epic