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 | editar código]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 | editar código]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 | editar código]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 | editar código]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 | 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 | editar código]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 | 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 | editar código]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 | 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 | editar código]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 | 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 | editar código]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 | editar código]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 | editar código]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 | 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 | editar código]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 | editar código]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 | editar código]- Help GitLab - Acessado em 26/08/2016
- GitHub Help - Acessado em 26/08/2016
- What are the different access permissions? - Acessado em 26/08/2016
- What's the difference between user and organization accounts? - Acessado em 26/08/2016
- Permission levels for a user account repository - Acessado em 26/08/2016
- Permission levels for an organization - Acessado em 26/08/2016
- Repository permission levels for an organization - Acessado em 26/08/2016
- Permissions GitLab - Acessado em 26/08/2016
- GitLab Documentation - Acessado em 27/08/2016
- Documentação de grupos do GitLab - Acessado em 27/08/2016
- Manuntenção e Configuração de times - Acessado em 27/08/2016
- Documentação sobre times do GitHub - Acessado em 27/08/2016