Privilégios e Permissão de Usuários e Grupos - GitLab x GitHub

Página destinada ao seminário da matéria de Gerência de Configuração de Software em 2016/02 onde o objetivo é apresentar informações sobre os privilégios e permissões que cada usuário pode ter dentro de repositórios do GitLab e GitHub, como também os controles de Grupos ou Times existentes nesses mesmos gestores de versões.

Introdução

editar

A grande expansão dos projetos na área da tecnologia da informação trouxe dificuldades em gerenciar e controlar o desenvolvimento dos diversos softwares, princilmente pelo fato da maioria ser desenvolvida colaborativamente. Os sistemas de versionamento online vieram para resolver problemas desse tipo, eles cresceram e além de trazer funcionalidades que dão controle amplo do projeto, passaram a disponibilizar também, grande interação entre desenvolvedores por meio da criação de grupos dentro do sistema, dentro desse grupos existem diferentes formas de cada usuário colaborar com o projeto e interagir com o respositório.

Logo a seguir serão mostradas e comparadas algumas permissões e privilégios que podem ser atreladas aos usuários dentro de um repositório ou nos times/grupos de colaboração no GitHub e no GitLab.

GitLab x GitHub

editar

Neste tópico será feita uma comparação rápida entre as diferentes funcionalidades proporcionados pelos dois sistemas.

GitLab GitHub
Cria grupos Cria organizações
Cria projetos privados de graça Cria times
5 niveis de permissões dentro de projetos 2 niveis de permissões dentro de repositórios
5 niveis de permissões dentro de grupos 3 niveis de permissões dentro de organizações
3 tipos de visibilidade na criação de projetos 2 tipos de visibilidade na criação de repositórios
3 tipos de visibilidade na criação de grupos 2 tipos de visibilidade na criação de organizações
Utilização mais clara da SSH Key Criação de times traz 4 níveis de permissões de repositórios
Pedir permissão diretamente para entrar em grupos Inserir colaboradores nos repositórios sem alteração de privilégio para cada um

Usuários no GitLab

editar

Quando um usuário é adicionado a um repositório de um projeto no GitLab, é possível selecionar tipos diferentes de privilégios que o mesmo poderá ter.

Repositórios comuns

editar

São 5 tipos de privilégios existentes:

  • Convidado (Guest);
  • Relator (Reporter);
  • Desenvolvedor (Developer);
  • Líder (Master);
  • Proprietário (Owner) do repositório.
Ações de usuários no GitLab
Ações Guest Reporter Developer Master Owner
Criar novos notificações de problemas (Issues) sim sim sim sim sim
Deixar comentários sim sim sim sim sim
Visualizar a lista de Builds sim¹ sim sim sim sim
Ver os Logs dos Builds sim¹ sim sim sim sim
Procurar e Baixar artefatos de Builds sim¹ sim sim sim sim
Baixar códigos do projeto (Pull) sim sim sim sim
Realizar download do projeto sim sim sim sim
Criar fragmentos de código (Snippets) sim sim sim sim
Gerenciar notificações de problemas (Issues) sim sim sim sim
Gerenciar labels sim sim sim sim
Visualizar estado de commit sim sim sim sim
See a container registry sim sim sim sim
See environments sim sim sim sim
Gerenciar e aceitar requisições de merge sim sim sim
Criar novas requisições de merge sim sim sim
Criar novas branches sim sim sim
Enviar modificações para branches não protegidas (Push e Force-Push) sim sim sim
Remover branches não protegidas sim sim sim
Adicionar mensagens de monitoramento em commits (Tags) sim sim sim
Escrever na página da WIKI sim sim sim
Cancelar e tentar novamente builds de código sim sim sim
Criar ou atualizar estados de commits sim sim sim
Update a container registry sim sim sim
Remove a contrainer registry image sim sim sim
Create new environmets sim sim sim
Criar novos conjuntos de tarefas (milestones) sim sim
Adicionar novos membros no time sim sim
Enviar modificações para branches protegidas (Push) sim sim
Habilitar ou desabilitar proteção em branches sim sim
Habilitar ou desabilitar envio de modificações de desenvolvedores à branches protegidas sim sim
Editar ou remover notificações de commits (Tags) sim sim
Editar informações do projeto sim sim
Adicionar chaves de deploy no projeto sim sim
Configure project hooks sim sim
Manage runners sim sim
Manage build triggers sim sim
Manage variables sim sim
Gerenciar páginas do projeto sim sim
Gerenciar domínios das páginas e certificados sim sim
Delete environmets sim sim
Alterar visibilidade do projeto sim
Transferir projeto para outro namespace sim
Excluir projeto sim
Excluir página do projeto sim
Remover branches protegidas
Enviar modificações forçadamente para branches protegidas (Force-Push)

¹ - Só é possível realizar essas ações caso dentro das configurações de CI (Integração contínua) estejam habilitadas.

Repositório com Integração Contínua (GitLab CI)

editar

Além das informações apresentadas na tabela acima, os repositórios que contem integração contínua habilitados podem atribuir outros tipos de funcionalidades a cada tipo de usuário.

São 4 tipos de privilégios:

  • Convidado/Relator (Guest/Reporter);
  • Desenvolvedor (Developer);
  • Líder (Master);
  • Administrador (Admin).
Ações de usuários no GitLab CI
Ações Guest/Reporter Developer Master Admin
Visualizar commits e builds sim sim sim sim
Tentar novamente ou cancelar builds sim sim sim
Excluir o projeto sim sim
Criar novo projeto sim sim
Mudar configurações do projeto sim sim
Add specific runners sim sim
Add shared runners sim
See events in the system sim
Acesso à interface do administrador sim

Usuários no GitHub

editar

O GitHub funciona diferente do GitLab nos controles de usuários dentro de repositórios.

Existem apenas 2 tipos de usuários:

  • Proprietário (Owner) do repositório;
  • Colaboradores (Collaborator).
Ações de usuários no GitHub
Ações Collaborator Owner
Baixar modificações do repositório (Pull) sim sim
Enviar modificações para o repositório (Push) sim sim
Aplicar labels e milestones sim sim
Controlar notificações de problemas (Issues) sim sim
Gerenciar commentarios em commits, pull requests e issues sim sim
Aceitar ou recusar merge de requisições de modificações (Pull request) sim sim
Enviar requisições de modificações para repositórios originados de fork (Pull Request) sim sim
Criar e editar páginas de WIKI sim sim
Criar e editar Releases sim sim
Desligar-se de um repositório colaborativo sim sim
Excluir repositório sim
Alterar visibilidade do projeto sim
Convidar colaboradores sim

Grupos no GitLab

editar

O GitLab possui uma funcionalidade parecida com a criação de organizações do GitHub, a criação de grupos. Abaixo estão as principais características:

  • Pode-se realizar tranferência de projetos já existentes para dentro de um grupo;
  • Os grupos no GitLab são feitos para juntar diversos projetos;
  • Podem ser adicionado pessoas para dentro desses grupos;
  • Os usuários podem ser colocados dentro dos grupos por um tempo determinado. Atingiu uma certa data, ele é retirado do grupo automaticamente;
  • Capacidade ilimitada para armazenar projetos.

Existem diferentes tipos de visibilidade que podem ser ligadas ao grupo:

  • Privado: O grupo e os projetos só podem ser vistos pelos próprios membros.
  • Interno: O grupo e os projetos podem ser visto por qualquer usuário conectado.
  • Publico: O grupo e os projetos públicos podem ser visto por qualquer usuário sem identificação.

Os níveis de permissões dentro do grupos são:

  • Convidado (Guest);
  • Relator (Reporter);
  • Desenvolvedor (Developer);
  • Líder (Master);
  • Propriétario (Owner) do repositório.
Ações de cada usuário nos grupos
Ações Guest Reporter Developer Master Owner
Pesquisar grupos públicos sim sim sim sim sim
Criar um projeto dentro do grupo sim sim
Editar grupo sim
Gerenciar os membros do grupo sim
Excluir o grupo sim

Organizações no GitHub

editar

Organizações são interessantes para a junção de multiplos projetos e colaboradores ou times em um só espaço de colaboração. Algumas características são:

  • Vários repositórios privados em contas pagas;
  • Permissões baseada em times colaborativos;
  • Ilimitado número de proprietários, administradores e colaboradores dentro dos times;
  • Receitas de faturamento podem ser enviados a uma segunda conta de email;
  • Proprietários de times podem ter acesso à membros da organização.

Os níveis de permissões dentro das organizações são:

  • Proprietário (Owner) da organização;
  • Gerente de faturamento (Billing Manager);
  • Outros Membros (Members).
Ações Billing Manager Members Owner
Visualizar e editar informações de faturamento sim sim
Criar times sim sim
Visualizar os membros e os times da organização sim sim
Utilizar @mention para qualquer time visível sim sim
Pode ser um gerenciador de time sim sim
Convidar pessoas para se juntar à organização sim
Editar e cancelar convites de entrada na organização sim
Excluir membros da organização sim
Reintegrar antigos membros à organização sim
Adicionar e remover pessoas em todos os times sim
Promover membros à gerenciadores de times sim
Adicionar colaboradores a todos os repositórios sim
Acessar o log de auditoria da organização sim
Excluir todos times sim
Excluir a organização e seus repositórios sim
Transferir repositórios sim

Times no GitHub

editar

A criação de times no GitHub, é uma funcionalidade extra que trouxe beneficios importantíssimos para o controle de projetos, dividindo as organizações em times menores, é possível otimizar o trabalho e melhorar a organização dos membros.

Uma das funcionalidades mais marcantes dentro de um time é o "Team @metions", algumas características dele:

  • Usado na interação entre usuários ou entre times em uma organização.
  • Pode ser usado em qualquer comentário, issue ou pull request.
  • Pode-se chamar diretamente a atenção de um usuário ou de um time.
  • Exemplo de uso:

Ao comentar em uma issue, o usuário pode digitar em qualquer lugar da frase o termo @nome-da-organização/nome-do-time para interagir diretamente com aquele time referenciado.

Permissões

editar

Quando um usuário cria um time dentro da organização, tem-se o direito de adicionar repositórios dentro desse mesmo time, fazendo isso, é ganhado novos niveis de permissões de repositório, que são:

  • Permissão de leitura. (read permission)
  • Permissão de escrita. (write permission)
  • Permissão de administrador. (admin permission)
  • Permissão de proprietário. (owner permission)
Ações de cada usuário nos times
Ações Read Permission Write Permission Admin Permission Owner Permission
Criar repositório sim sim sim sim
Realizar pull apartir do repositório do time sim sim sim sim
Copiar repositórios da equipe sim sim sim sim
Enviar pull requests a partir dos forks de repositórios da equipe sim sim sim sim
Abrir issues sim sim sim sim
Fechar as próprias issues sim sim sim sim
Have an issue assigned to them sim sim sim sim
Vizualizar releases publicadas sim sim sim sim
Editar e deletar seus próprios comentários em commits, pull requests e issues sim sim sim sim
Editar wikis sim sim sim sim
Realizar push para o repositório do time sim sim sim
Fundir e fechar pull requests sim sim sim
Fechar, reabrir e nomear issues sim sim sim
Aplicar labels e milestones sim sim sim
Criar e editar releases sim sim sim
Visualizar projeto de releases sim sim sim
Editar e deletar qualquer comentário em commits, pull requests e issues sim sim sim
Criar statuses sim sim sim
Deletar repositório sim sim
Mudar as configurações do repositório sim sim
Mudar a visibilidade do repositório sim sim
Tranferir repositório para dentro e para fora da organização sim sim
Adicionar repositório no time sim sim
Adicionar colaborador externo para o repositório sim sim
Remover colaborador externo do repositório sim sim
Pull (read), push (write), e clonar todos os repositórios da organização sim
Promover um membro da organização para team maintainer sim
Converter um membro da organização para colaborador externo sim

Há também outros dois tipos de nívis de permissões que aparece dentro dos times:

  • Team Maintainers, pode:
    • Mudar o nome do time, descrição, e visibilidade
    • Adicionar membros da organização para o time
    • Remover membros da organização do time
    • Promover um membro do time para team maintainer
    • Remove o acesso da equipe para repositórios
    • Reintegra um ex-membro da organização
  • Outside Collaborators

Um colaborador externo é uma pessoa que tem acesso a um ou mais repositórios da organização, mas não é explicitamente um membro, ele é como um consultor ou empregado temporário.

Tipos de visibilidade

editar

Existem dois tipos de visibilade que o usuário pode escolher na hora de criar o time.

  • Time visível
    • Poder ser visto e @mencionado por todos os membros da organização.
  • Time secreto
    • Poder ser visto apenas pelos membros dos times e pelos proprietários.
    • Usado para trabalhar com parceiros externos ou clientes.

Conclusão

editar

Com base nesta página e nos links aqui contidos, qualquer usuário poderá ter uma base melhor de uma das funcionalidades dos sistemas de versionamento Git, ajudando a escolher entre o melhor para ser usado com base nas necessidades do projeto x demanda do sistema.

Referências

editar