2015-01-11 8 views
5

Attualmente ho un bot che automatizza alcune operazioni di GitHub, come l'unione delle richieste di pull, la notifica dello staff su Slack quando viene aperto un PR, quel genere di cose (è un istanza Hubot personalizzata)API GitHub Come verificare se l'utente ha accesso in scrittura a un repository

Quando il personale gli assegna il comando per unire una richiesta di pull, controlla innanzitutto se appartengono a una squadra che ha accesso in scrittura a quel repository. Funziona, ma il codice non è eccezionale.

Prima ottiene tutti i team nell'organizzazione, li scorre attraverso, ottiene tutti gli utenti assegnati a quel team, se trova l'utente che emette il comando di unione, quindi controlla se quel gruppo ha accesso in scrittura. In caso contrario, l'autenticazione è buona.

È questo il modo migliore per farlo? Sento che potrebbe essere molto più semplice.

risposta

4

UPDATE: ora c'è un API endpoint GitHub per questo:

https://developer.github.com/v3/repos/collaborators/#review-a-users-permission-level


RISPOSTA VECCHIO: Non c'è un modo molto più semplice per fare questo al momento (ma sono d'accordo che sarebbe sii fantastico se esistesse un modo più elegante per ottenere queste informazioni). Potresti forse ridurre il numero di richieste recuperando the user's teams e the list of teams which have access to the repository (e non tutti i team nelle organizzazioni). L'intersezione di questi due elenchi dovrebbe consentire di rispondere alla domanda, penso.

(Inoltre, nella soluzione, si noti che non è necessario solo verificare che l'utente sia membro di un team di accesso diretto. È inoltre necessario verificare che questo gruppo di accesso remoto sia has access to the repository in question. stato membro di un gruppo di accesso diretto che non ha accesso al repository in questione e membro di un gruppo di accesso diretto che ha accesso al repository in questione.)

+0

Simile a http://stackoverflow.com/a/20734751/12916. –

+0

@lukerollins Ho appena aggiornato la risposta con un collegamento a un nuovo endpoint che consente di eseguire questa operazione: https://developer.github.com/v3/repos/collaborators/#review-a-users-permission-level –

1

La mia azienda utilizza Github enterprise .

Questo API Docs link aiutato

GET/repos /: proprietario /: repo/collaboratori /: username

Se l'utente ha accesso si otterrebbe una risposta simile a

Stato: 204 No Content

Limite X-Rate Limite: 5000

X-RateLimit-rimanente: 4999

+0

As notato in http://stackoverflow.com/questions/20733221/determine-a-collaborators-permissions-to-an-organization-repos-via-the-api questo non è sufficiente per distinguere le modalità di accesso, nel caso in cui alcune squadre sono date accesso alla tirata e altri accesso maggiore. Per alcune applicazioni potrebbe non avere importanza. –

+0

La soluzione è enumerare tutti i comandi '/ repos /: owner /: repo/collaboratori', cercando una corrispondenza con l'utente specificato e controllando' permessi', ma questo è inefficiente specialmente dal momento che il paging potrebbe obbligarti a fare più richieste.Ho contattato GitHub e un rappresentante ha convenuto che potrebbero prendere in considerazione una API dedicata a questo scopo. –

Problemi correlati