When making authenticated requests to the GitHub Enterprise Server API, applications often need to fetch the current user's repositories and organizations. このガイドでは、これらのリソースを確実に調べる方法について説明します。
To interact with the GitHub Enterprise Server API, we'll be using Octokit.rb. このプロジェクトの完全なソースコードは、platform-samplesリポジトリにあります。
はじめましょう
ま� 「認証の基本」ガイドを読んでいない� �合は、それを読んでから以下の例に取り組んでく� さい。 以下の例は、OAuthアプリケーションを登録済みで、アプリケーションがユーザのOAuthトークンを持っていることを前提としています。
アプリケーションでアクセス可能なユーザのリポジトリを調べる
ユーザは、個人でリポジトリを所有する他に、別のユーザやOrganizationが所有するリポジトリのコラボレータであることもあります。 Collectively, these are the repositories where the user has privileged access: either it's a private repository where the user has read or write access, or it's a public or internal repository where the user has write access.
アプリがユーザのどのリポジトリにアクセスできるかを決めるのは、OAuthスコープおよびOrganizationのアプリケーションポリシーです。 以下のワークフローを使用して、これらのリポジトリを調べます。
いつものように、まずはGitHubのOctokit.rb Rubyライブラリを読み込む必要があります。 そしてOctokit.rbがページネーションを自動的に処理してくれるよう設定します。
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
アプリケーションがアクセス可能なユーザのOrganizationを調べる
アプリケーションは、ユーザに対してOrganizationに関するあらゆるタスクを実行できます。 アプリケーションがタスクを実行するには、必要な権限を持つOAuth認証 が必要です。 たとえば、read:org
スコープではTeamのリストを取得でき、user
スコープではユーザのOrganizationに属するメンバーを取得できます。 ユーザがこれらのスコープのうちの1つ以上をアプリケーションに付与すると、ユーザのOrganizationをフェッチする準備が整います。
上記でリポジトリを調べたときと同様に、まずはGitHubのOctokit.rb Rubyライブラリを呼び出し、ページネーションを扱えるようにしましょう。
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"]
これで、アプリケーションがアクセス可能なユーザのOrganizationを取得できます。
client.organizations.each do |organization|
puts "User belongs to the #{organization[:login]} organization."
end
ユーザのすべてのOrganizationメンバーシップを返す
このドキュメントを端から端まで読ん� 方は、ユーザのパブリックなOrganizationに属するメンバーを取得するAPIメソッドに気付いたかもしれません。 ほとんどのアプリケーションでは、このAPIメソッドを避けるべきです。 このメソッドは、ユーザのパブリックなOrganizationに属するメンバー� けを返し、プライベートなOrganizationに属するメンバーは返しません。
アプリケーションでは通常、アクセスを認可されたすべてのユーザのOrganizationが求められます。 上記のワークフローでは、まさにこれを実行しています。