API GitHub Как проверить, имеет ли пользователь права на запись в репозиторий

В настоящее время у меня есть бот, который автоматизирует несколько операций GitHub, таких как слияние запросов на тягу, уведомление сотрудников о Slack при открытии PR, такого рода вещи (это особый приукрашенный экземпляр Hubot)

Когда сотрудники дают ему команду для слияния запроса на тяну, он сначала проверяет, принадлежат ли они команде, которая имеет право на запись в этот репозиторий. Он работает, но код невелик.

Сначала он получает все команды в организации, проходит через них, получает всех пользователей, назначенных этой команде, если он найдет пользователя, выдающего команду слияния, он затем проверяет, имеет ли эта команда доступ к записи. Если это не так, аутентификация хорошая.

Это лучший способ сделать это? Я чувствую, что это может быть намного проще.

Ответ 1

UPDATE: для этого есть конечная точка API GitHub:

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


OLD ANSWER: В настоящее время нет гораздо более простого способа сделать это (но я согласен с тем, что было бы замечательно, если бы был более элегантный способ получить эту информацию). Вы могли бы уменьшить количество запросов, извлекая пользовательские команды и список команд, имеющих доступ к репозиторию (и не все команды в организациях). Пересечение этих двух списков должно позволить вам ответить на вопрос, я думаю.

(Кроме того, в вашем решении обратите внимание, что вам нужно не только проверить, что пользователь является членом команды push-access, вам также необходимо проверить, что эта команда push-access имеет доступ к рассматриваемому репозиторию. Пользователь мог быть членом команды push-access, которая не имеет доступа к рассматриваемому репозиторию и члену команда pull-access, которая имеет доступ к рассматриваемому репозиторию.)

Ответ 2

Моя компания использует предприятие Github.

Эта ссылка API Docs помогла

GET/repos/: владелец /: репо/соавторы/: имя пользователя

Если у пользователя есть доступ, вы получите ответ, похожий на

Статус: 204 Без содержания

X-RateLimit-Limit: 5000

X-RateLimit-Осталось: 4999