Skip to main content

Доступ к пакетам

Это набор ограничений, которые разрешают или запрещают доступ к локальному хранилищу по определенному критерию.

Ограничения реализуются плагинами, по умолчанию verdaccio использует плагин htpasswd. Если вы используете другой плагин, то детали могут отличаться. Плагин по умолчанию не реализует allow_access and allow_publish, использется встроенная реализация, которая включается именно в такой ситуации - когда плагин не реализовал эти методы.

Для более детальной информации о разрешениях, обратитесь к странице аутентификации в вики.

Использование

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

если не задано никаких правил, остается правило по умолчанию

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

Вот список внутренних групп, используемых verdaccio:

'$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. Например, если вы залогинились как npmUser, у вас будут вот такие группы.

// группы без '$' будут отмечены как deprecated когда-нибудь
'$all', '$anonymous', '@all', '@anonymous', 'all', 'undefined', 'anonymous', 'npmUser'

Если вы хотите разрешить доступ к некоторому набору пакетов только членам своей группы, вам нужно делать так. Давайте будем использовать regex, который выберет все пакеты с префиксом npmuser-. Мы рекомендем использовать префикс для ваших пакетов, так проще всего настраивать разграничение прав.

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

Перезапустите verdaccio и попробуйте установить 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! A complete log of this run can be found in:
npm ERR!

Вы можете изменить описанное поведение, используя другой плагин аутентификации. verdaccio всего лишь проверяет, входит ли пользователь, который пытается загрузить или опубликовать пакет, в правильную группу.

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

Установка нескольких групп

Если вы хотите заблокировать доступ и публикацию для определённой группы пакетов, просто удалите строчки access и publish.

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

Блокировка доступа к набору пакетов

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

Запрещение проксирования для набора пакетов

Рассмотрим следующий пример:

Опишем, что мы хотели в примере выше:

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:

  • Я хочу хранить свой собственный пакет jquery, и мне нужно запретить проксирование для него.
  • Я хочу хранить пакеты, удовлетворяющие паттерну my-company-*, и мне нужно запретить проксирование для них.
  • Я хочу хранить пакеты из скоупа my-local-scope, и мне нужно запретить проксирование для них.
  • Я хочу проксирование для всех остальных пакетов.

Учтите, что порядок правил важен, и всегда добавляейте правило для двух звездочек. Потому что если его не будет, то verdaccio сам добавит его, что может повлиять на способ разрешения ваших зависимостей.

В примере выше, было описано такое поведение:

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

Удаление опубликованных пакетов

Свойство publish определяет права доступа для команд npm publish и npm unpublish. Но, если вы хотите задать разрешение отдельно, можно использовать свойтство unpublish в секции доступа к пакетам, например:

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

Если вы хотите получить больше информации о том, как использовать свойство storage, пожалуйста, обратитесь к этом комментарию.

  • все пользователи могут публиковать пакет jquery, но только пользователь root может удалять любые версии.
  • только аутентифицированные пользователи могут публиковать покаты my-company-*, но никто не может удалять их.
  • Если unpublish закомментировать, то доступ будет определяяться свойством publish.

Configuration

Вы можете определить несколько наборов пакетов и для каждого из них должен быть задан уникальный regex. Синтаксис базируется на minimatch glob expressions.

СвойствоТипОбязательноеПримерПоддержкаОписание
accessstringНет$allвсеопределяет группы, которым можно скачать этот пакет
publishstringНет$authenticatedвсеопределяет группы, которым можно публиковать этот пакет
proxystringНетnpmjsвсеопределяет аплинки для этого пакета
storagestringНетstring/some-folderопределяет подпапку в хранилище для этого пакета (пакетов)

Хочется отдельно отметить, что мы рекомендуем не использовать allow_access/allow_publish и proxy_access, они - deprecated и скоро будут удалены, пожалуйста, используйте короткие версии (access/publish/proxy).

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