# Ermitteln von Ressourcen für einen Benutzer

Hier erfährst du, wie du Repositorys und Organisationen findest, auf die deine App für Benutzer*innen zuverlässig für authentifizierte Anforderungen an die REST-API zugreifen kann.

Bei authentifizierten Anforderungen an die GitHub API müssen Anwendungen häufig die Repositorys und Organisationen des aktuellen Benutzers abrufen. In diesem Leitfaden wird erläutert, wie diese Ressourcen zuverlässig entdeckt werden.

Um mit der GitHub API zu interagieren, verwenden wir [Octokit.rb](https://github.com/octokit/octokit.rb). Den vollständigen Quellcode für dieses Projekt findest du im Repository [platform-samples](https://github.com/github/platform-samples/tree/master/api/ruby/discovering-resources-for-a-user).

## Erste Schritte

Falls du es noch nicht getan hast, solltest du den Leitfaden [Grundlagen der Authentifizierung](/de/enterprise-server@3.22/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app) lesen, bevor du die folgenden Beispiele durcharbeitest. In den folgenden Beispielen wird davon ausgegangen, dass Sie [ein OAuth app](/de/enterprise-server@3.22/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app)[OAuth-Token für einen Benutzer registriert haben und dass Ihre Anwendung über ein OAuth-Token verfügt](/de/enterprise-server@3.22/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#making-authenticated-requests).

## Entdecke die Repositorys, auf die deine App für einen Benutzer zugreifen kann

Zusätzlich zu seinen eigenen persönlichen Repositories kann ein Benutzer ein Mitarbeiter an Repositorys von anderen Benutzern und Organisationen sein. Zusammen sind dies die Repositorys, in denen der Benutzer privilegierten Zugriff hat: entweder ein privates Repository, in dem der Benutzer Lese- oder Schreibzugriff hat, oder es handelt oder internes Repository, in dem der Benutzer Schreibzugriff hat.

[OAuth-Bereiche](/de/enterprise-server@3.22/apps/oauth-apps/building-oauth-apps/scopes-for-oauth-apps) und [Organisationsanwendungsrichtlinien](https://developer.github.com/changes/2015-01-19-an-integrators-guide-to-organization-application-policies/) bestimmen, auf welche dieser Repositorys deine App für einen Benutzer zugreifen kann. Verwende den folgenden Workflow, um diese Repositorys zu entdecken.

Wie immer benötigen wir zunächst [GitHub octokit.rb](https://github.com/octokit/octokit.rb) Ruby Library. Anschließend konfigurieren wir Octokit.rb, um die Paginierung für uns automatisch handzuhaben. Weitere Informationen zur Paginierung findest du unter [Verwenden der Paginierung in der REST-API](/de/enterprise-server@3.22/rest/using-the-rest-api/using-pagination-in-the-rest-api).

```ruby
require 'octokit'

Octokit.auto_paginate = true
```

Als Nächstes übergeben wir das [OAuth-Token unserer Anwendung für einen bestimmten Benutzer](/de/enterprise-server@3.22/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#making-authenticated-requests):

```ruby
# !!! 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"]
```

Dann sind wir bereit, die [Repositorys abzurufen, auf die unsere Anwendung für den Benutzer zugreifen kann](/de/enterprise-server@3.22/rest/repos/repos#list-repositories-for-the-authenticated-user):

```ruby
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
```

## Entdecken Sie, auf welche Organisationen Ihre App für einen Benutzer zugreifen kann.

Anwendungen können alle Arten von organisationsbezogenen Aufgaben für einen Benutzer ausführen. Um diese Aufgaben auszuführen, benötigt die App eine [OAuth-Autorisierung](/de/enterprise-server@3.22/apps/oauth-apps/building-oauth-apps/scopes-for-oauth-apps) mit ausreichender Berechtigung. Der Bereich `read:org` ermöglicht es Dir beispielsweise, [Teams auflisten](/de/enterprise-server@3.22/rest/teams/teams#list-teams) zu können, und der Bereich `user` ermöglicht es Dir, [die Mitgliedschaft des Benutzers zu veröffentlichen](/de/enterprise-server@3.22/rest/orgs/members#set-public-organization-membership-for-the-authenticated-user). Sobald ein Benutzer deiner App einen oder mehrere dieser Bereiche zugewiesen hat, kannst du die Organisationen des Benutzers abrufen.

Genau wie bei der Erkennung von Repositories (siehe oben) benötigen wir zunächst die GitHub-Ruby-Bibliothek [Octokit.rb](https://github.com/octokit/octokit.rb) und konfigurieren sie so, dass sie die Paginierung für uns übernimmt. Weitere Informationen zur Paginierung findest du unter [Verwenden der Paginierung in der REST-API](/de/enterprise-server@3.22/rest/using-the-rest-api/using-pagination-in-the-rest-api).

```ruby
require 'octokit'

Octokit.auto_paginate = true
```

Als Nächstes übergeben wir das [OAuth-Token unserer Anwendung für einen bestimmten Benutzer](/de/enterprise-server@3.22/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#making-authenticated-requests), um unseren API-Client zu initialisieren:

```ruby
# !!! 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"]
```

Anschließend können wir [die Organisationen auflisten, auf die unsere Anwendung für den Benutzer zugreifen kann](/de/enterprise-server@3.22/rest/orgs/orgs#list-organizations-for-the-authenticated-user):

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

### Zurückgeben aller Organisationsmitgliedschaften des Benutzers

Wenn du die Dokumente von vorne bis hinten gelesen hast, hast du möglicherweise eine [API-Methode für die Auflistung der Mitgliedschaften der öffentlichen Organisation eines Benutzers](/de/enterprise-server@3.22/rest/orgs/orgs#list-organizations-for-a-user) bemerkt. Die meisten Anwendungen sollten diese API-Methode vermeiden. Diese Methode gibt nur die Mitgliedschaften der öffentlichen Organisation des Benutzers zurück, nicht seine privaten Organisationsmitgliedschaften.

Als Anwendung möchtest du in der Regel alle Organisationen des Benutzers haben, auf die deine Anwendung zugreifen darf. Der oben genannte Workflow gibt Dir genau das.