Skip to main content

Permissões dos Pacotes

É uma série de restrições que permitem ou restringem o acesso ao armazenamento local com base em critérios específicos.

As restrições de segurança permanecem dependentes do plugin em uso, por padrão o verdaccio usa o htpasswd plugin. Se você usar um plugin diferente, o comportamento poderá ser diferente. O plugin padrão não suporta allow_access e allow_publish por si só, ele usa um fallback interno caso o plugin não esteja pronto para isso.

Para mais informações sobre permissões visite a seção de autenticação no wiki.

Utilização

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

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

'**':
# permite a todos os usuários (incluindo os não autentificados) a ler e
# publicar todos os pacotes
access: $all
publish: $all

se nenhum for especificado, o padrão permanece

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

A lista de grupos internos gerenciados pelo verdaccio são:

'$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. Por exemplo, se você estiver logado como npmUser, a lista de grupos será.

// groups without '$' are going to be deprecated eventually
'$all', '$anonymous', '@all', '@anonymous', 'all', 'undefined', 'anonymous', 'npmUser'

Se você quiser proteger um grupo de pacotes específicos dentro do seu grupo, você deve fazer algo semelhante a isso. Vamos usar um Regex que cubra todos os pacotes npmuser- prefixados. Recomendamos usar um prefixo para seus pacotes, assim será mais fácil protegê-los.

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

Reinicie o verdaccio e no seu console tente instalar o 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!

Você pode alterar o atual comportamento usando uma autenticação de plugin diferente. O verdaccio apenas verifica se o usuário que tentou acessar ou publicar um pacote específico pertence ao grupo correto.

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

Definir vários grupos

Definir vários grupos de acesso é bastante fácil, basta defini-los com um espaço em branco entre eles.

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

Bloqueando o acesso ao conjunto de pacotes

Se você quiser bloquear o acesso/publicação para um grupo específico de pacotes. Apenas não defina access e publish.

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

Bloqueando a transmissão de um conjunto de pacotes específicos

Vamos ver o seguinte exemplo:

Vamos descrever o que queremos com o exemplo acima:

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:

  • Eu quero hospedar minha própria dependência jquery, mas eu preciso evitar o proxy.
  • Eu quero todas as dependências que combinam com my-company-*, mas eu preciso que os pacotes não se realizem via proxy.
  • Eu quero todas as dependências que estão no escopo my-local-scope, mas eu preciso que os pacotes não se realizem via proxy.
  • Eu quero que o resto das dependências se realizem via proxy.

Esteja **ciente de que a ordem das suas definições de pacotes é importante e use sempre wildcard duplo **. Porque se você não incluir o verdaccio irá incluí-lo para você e o modo como suas dependências serão resolvidas será afetado.

No exemplo anterior, o comportamento seria descrito como:

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

Cancelando a Publicação de Pacotes

A propriedade publish controla permissões para npm publish e npm unpublish. Mas, se você quiser ser mais específico, você pode usar a propriedade unpublish em sua seção de acesso a pacotes, por exemplo:

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

Se você quiser mais informações sobre como usar a propriedade storage, consulte este comentário.

  • todos os usuários podem publicar o pacote jquery, mas somente o usuário root poderá cancelar a publicação de qualquer versão.
  • somente usuários autenticados podem publicar pacotes my-company-*, mas ninguém poderá cancelar a publicação deles.
  • Se unpublish estiver comentado, o acesso será concedido ou negado pela definição publish.

Configuration

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

PropriedadeTipoObrigatórioExemploSuporteDescrição
accessstringNão$allcompletodefine os grupos com permissão para acessar os pacotes
publishstringNão$authenticatedcompletodefine os grupos permitidos a publicar
proxystringNãonpmjscompletolimita a busca a um uplink específico
storagestringNãostring/some-folderele cria uma subpasta dentro da pasta de armazenamento para cada acesso ao pacote

Salientamos a recomendação de não usar mais allow_access/allow_publish e proxy_access, eles estão obsoletos e serão removidos em breve. Use a versão curta de cada um deles (access/publish/proxy).

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