Skip to main content

Обнаружение ресурсов для пользователя

Узнайте, как найти репозитории и организации, к которым ваше приложение может безопасно и надежно получить доступ для запросов к REST API, прошедших проверку подлинности.

При выполнении запросов с проверкой подлинности к API GitHub приложениям часто требуется получить репозитории и организации текущего пользователя. В этом руководстве мы объясним, как уверенно находить эти ресурсы.

Для взаимодействия с API GitHub мы используем Octokit.rb. Полный исходный код этого проекта можно найти в репозитории platform-samples.

Начало работы

Перед тем как приступать к изучению приведенных ниже примеров, ознакомьтесь с руководством по основам проверки подлинности, если вы еще этого не сделали. В приведенных ниже примерах предполагается, что вы зарегистрировали OAuth app и что приложение имеет маркер OAuth для пользователя.

Обнаружение репозиториев, к которым приложение может получать доступ для пользователя

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

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

Как всегда, сначала нам понадобится библиотека Ruby Octokit.rb для GitHub. Затем мы настроим Octokit.rb для автоматической обработки разбиения на страницы. Дополнительные сведения о разбиении на страницы см. в разделе "Использование разбиения на страницы в REST API".

require 'octokit'

Octokit.auto_paginate = true

Далее мы передадим токен OAuth приложения для данного пользователя:

# !!! DO NOT EVER USE HARD-CODED VALUES IN A REAL APP !!!
# Instead, set and test environment variables, like below.
client = Octokit::Client.new :access_token => ENV["OAUTH_ACCESS_TOKEN"]

После этого мы готовы получить репозитории, к которым приложение может получать доступ для пользователя:

client.repositories.each do |repository|
  full_name = repository[:full_name]
  has_push_access = repository[:permissions][:push]

  access_type = if has_push_access
                  "write"
                else
                  "read-only"
                end

  puts "User has #{access_type} access to #{full_name}."
end

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

Приложения могут выполнять для пользователя самые разные задачи, связанные с организациями. Для их выполнения приложению требуется авторизация OAuth с достаточными разрешениями. Например, область read:org позволяет получать список команд, а область user — публиковать сведения о членстве пользователя в организациях. После того как пользователь предоставит приложению одну или несколько этих областей, вы можете получить сведения о его организациях.

Так же, как и при обнаружении репозиториев выше, мы начнем с необходимости GitHub в библиотеке Octokit.rb Ruby и настройки ее, чтобы заботиться о разбиении на страницы для нас. Дополнительные сведения о разбиении на страницы см. в разделе "Использование разбиения на страницы в REST API".

require 'octokit'

Octokit.auto_paginate = true

Далее мы передадим токен OAuth приложения для данного пользователя, чтобы инициализировать клиент API:

# !!! DO NOT EVER USE HARD-CODED VALUES IN A REAL APP !!!
# Instead, set and test environment variables, like below.
client = Octokit::Client.new :access_token => ENV["OAUTH_ACCESS_TOKEN"]

Затем мы можем получить список организаций, к которым приложение может получать доступ для пользователя:

client.organizations.each do |organization|
  puts "User belongs to the #{organization[:login]} organization."
end

Возврат сведений обо всех организациях, в которые входит пользователь

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

Приложению же, как правило, требуются сведения обо всех организациях пользователя, к которым приложению разрешен доступ. Описанный выше рабочий процесс дает именно такой результат.