Skip to main content

Dostęp do Pakietu

Jest to seria ograniczeń, która pozwala lub zabrania dostępu do pamięci lokalnej bazując na konkretnych kryteriach.

Ograniczenia bezpieczeństwa pozostają na ramkach używanej wtyczki, domyślnie verdaccio używa wtyczki htpasswd. Jeśli używasz innej wtyczki, zachowanie może być inne. Domyślna wtyczka nie obsługuje samodzielnie allow_access i allow_publish, korzysta z wewnętrznego mechanizmu zastępczego w przypadku, gdy wtyczka nie jest gotowa.

Aby uzyskać więcej informacji o uprawnieniach, odwiedź sekcję uwierzytelniania na wiki.

Użycie

packages:
# scoped packages
'@scope/*':
access: $all
publish: $all
proxy: server2

'private-*':
access: $all
publish: $all
proxy: uplink1

'**':
# allow all users (including non-authenticated users) to read and
# publish all packages
access: $all
publish: $all
proxy: uplink2

jeśli żadna nie jest określona, pozostaje domyślna

packages:
'**':
access: $all
publish: $authenticated

The list internal groups handled by verdaccio are:

'$all', '$anonymous', '@all', '@anonymous', 'all', 'undefined', 'anonymous'

All users receive all those set of permissions independently of is anonymous or not plus the groups provided by the plugin, in case of htpasswd return the username as a group. Na przykład, jeśli jesteś zalogowany jako npmUser, będzie to lista grup.

// grupy bez '$' ostatecznie zostaną uznane za przestarzałe
'$all', '$anonymous', '@all', '@anonymous', 'all', 'undefined', 'anonymous', 'npmUser'

Jeśli chcesz chronić określone zestawy pakietów w swojej grupie, musisz zrobić coś takiego. Użyjmy Regex, który obejmuje wszystkie pakiety z prefiksem npmuser-. We recommend using a prefix for your packages, in that way it will be easier to protect them.

packages:
'npmuser-*':
access: npmuser
publish: npmuser

Zrestartuj verdaccio i w swojej konsoli spróbuj zainstalować npmuser-core.

$ npm install npmuser-core
npm install npmuser-core
npm ERR! code E403
npm ERR! code E403
npm ERR! 403 Forbidden: npmuser-core@latest

npm ERR! Kompletny dziennik tego przebiegu można znaleźć w: npm ERR!

Możesz zmienić istniejące zachowanie, korzystając z innego uwierzytelniania wtyczki. verdaccio po prostu sprawdza, czy użytkownik, który próbował uzyskać dostęp lub opublikował konkretny pakiet, należy do właściwej grupy.

Please note that if you set the access permission of a package to something that requires Verdaccio to check your identity, for example $authenticated, npm does not send your access key by default when fetching packages. This means all requests for downloading packages will be rejected as they are made anonymously even if you have logged in. To make npm include you access key with all requests, you should set the always-auth npm setting to true on any client machines. This can be accomplished by running:

packages:
'jquery':
access: $all
publish: $all
unpublish: root
'my-company-*':
access: $all
publish: $authenticated
unpublish:
'@my-local-scope/*':
access: $all
publish: $authenticated
# unpublish: property commented out
'**':
access: $all
publish: $authenticated
proxy: npmjs

Ustaw wiele grup

Definiowanie wielu grup dostępu jest dość łatwe, wystarczy je zdefiniować z białymi znakami między nimi.

  'company-*':
access: admin internal
publish: admin
proxy: server1
'supersecret-*':
access: secret super-secret-area ultra-secret-area
publish: secret ultra-secret-area
proxy: server1

Blokowanie dostępu do zestawu pakietów

If you want to block the access/publish to a specific group of packages. Just do not define access and publish.

packages:
'old-*':
'**':
access: $all
publish: $authenticated

Blokowanie proxy dla zestawu określonych pakietów

Zobaczmy następujący przykład:

Opiszmy, czego chcemy w powyższym przykładzie:

packages:
'jquery':
access: $all
publish: $all
'my-company-*':
access: $all
publish: $authenticated
'@my-local-scope/*':
access: $all
publish: $authenticated
'**':
access: $all
publish: $authenticated
proxy: npmjs

Let's describe what we want with the above example:

  • Chcę hostować własną jquery zależność, ale muszę unikać proxy.
  • I want all dependencies that match with my-company-* but I need to avoid proxying them.
  • I want all dependencies that are in the my-local-scope scope but I need to avoid proxying them.
  • I want proxying for all the rest of the dependencies.

Be aware that the order of your packages definitions is important and always use double wilcard. Because if you do not include it verdaccio will include it for you and the way that your dependencies are resolved will be affected.

Możesz zablokować jeden lub kilka pakietów z pobierania ze zdalnych repozytoriów, ale jednocześnie umożliwić innym dostęp do różnych uplinks.

'**':
access: $all
publish: $authenticated
proxy: npmjs uplink2

Unpublishing Packages

The property publish handle permissions for npm publish and npm unpublish. But, if you want to be more specific, you can use the property unpublish in your package access section, for instance:

packages:
'jquery':
access: $all
publish: $all
unpublish: root
'my-company-*':
access: $all
publish: $authenticated
unpublish:
'@my-local-scope/*':
access: $all
publish: $authenticated
# unpublish: property commented out
'**':
access: $all
publish: $authenticated
proxy: npmjs

In the previous example, the behaviour would be described:

  • all users can publish the jquery package, but only the user root would be able to unpublish any version.
  • only authenticated users can publish my-company-* packages, but nobody would be allowed to unpublish them.
  • If unpublish is commented out, the access will be granted or denied by the publish definition.

Configuration

You can define mutiple packages and each of them must have an unique Regex. The syntax is based on minimatch glob expressions.

WłaściwośćTypWymaganePrzykładWsparcieOpis
accessciąg znakówNie$allwszystkiedefine groups allowed to access the package
publishciąg znakówNie$authenticatedwszystkiedefine groups allowed to publish
proxyciąg znakówNienpmjswszystkielimit look ups for specific uplink
magazynciąg znakówNieciąg znaków/some-folderit creates a subfolder whithin the storage folder for each package access

Podkreślamy, że zalecamy niekorzystanie dłużej z allow_access/allow_publishi** proxy_access**, są one nieaktualne i wkrótce zostaną usunięte. Użyj skróconej wersji każdego z tych (access/publish/proxy).

If you want more information about how to use the storage property, please refer to this comment.