# Descubrir los recursos para un usuario

Aprende cómo encontrar los repositorios y organizaciones a los cuales puede acceder tu app para un usuario de manera confiable para tus solicitudes autenticadas a la API de REST.

Al realizar solicitudes autenticadas a la GitHub API, las aplicaciones suelen necesitar capturar los repositorios y organizaciones del usuario actual. En esta guía, te explicaremos cómo descubrir estos recursos de forma confiable.

Para interactuar con la GitHub API, usaremos [Octokit.rb](https://github.com/octokit/octokit.rb). Puede encontrar el código fuente completo para este proyecto en el repositorio [platform-samples](https://github.com/github/platform-samples/tree/master/api/ruby/discovering-resources-for-a-user).

## Comenzar

Si todavía no lo has hecho, debes leer la guía [Aspectos básicos de la autenticación](/es/enterprise-server@3.22/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app) antes de trabajar con los ejemplos siguientes. En los ejemplos siguientes se supone que ha [registrado y OAuth app](/es/enterprise-server@3.22/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app) que la [aplicación tiene un token de OAuth para un usuario](/es/enterprise-server@3.22/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#making-authenticated-requests).

## Descubre los repositorios a los cuales tu app puede acceder para un usuario

Adicionalmente a tener sus propios repositorios personales, un usuario puede ser un colaborador en los repositorios que pertenezcan a otros usuarios y organizaciones. En conjunto, estos son los repositorios en los que el usuario tiene acceso con privilegios: ya sea un repositorio privado en el que el usuario tiene acceso de lectura o escritura, o es o interno donde el usuario tiene acceso de escritura.

Los [ámbitos de OAuth](/es/enterprise-server@3.22/apps/oauth-apps/building-oauth-apps/scopes-for-oauth-apps) y las [directivas de aplicación de la organización](https://developer.github.com/changes/2015-01-19-an-integrators-guide-to-organization-application-policies/) determinan a qué repositorios puede acceder la aplicación para un usuario. Utiliza el siguiente flujo de trabajo para descubrir estos repositorios.

Como siempre, primero necesitaremos la biblioteca Ruby [Octokit.rb](https://github.com/octokit/octokit.rb) de GitHub. Después, se configurará Octokit.rb para controlar automáticamente la paginación. Para obtener más información sobre la paginación, consulta [Uso de la paginación en la API de REST](/es/enterprise-server@3.22/rest/using-the-rest-api/using-pagination-in-the-rest-api).

```ruby
require 'octokit'

Octokit.auto_paginate = true
```

Luego, se pasará el [token de OAuth de la aplicación para un usuario determinado](/es/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"]
```

Después, ya se podrán obtener los [repositorios a los que la aplicación puede acceder para el usuario](/es/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
```

## Descubre las organizaciones a las cuales puede acceder tu app para un usuario

Las aplicaciones pueden llevar a cabo todo tipo de tareas relacionadas con las organizaciones para un usuario. Para realizar estas tareas, la aplicación necesita una [autorización de OAuth](/es/enterprise-server@3.22/apps/oauth-apps/building-oauth-apps/scopes-for-oauth-apps) con permisos suficientes. Por ejemplo, el ámbito `read:org` permite [enumerar equipos](/es/enterprise-server@3.22/rest/teams/teams#list-teams) y el ámbito `user` permite [publicitar la pertenencia a la organización del usuario](/es/enterprise-server@3.22/rest/orgs/members#set-public-organization-membership-for-the-authenticated-user). Una vez que un usuario haya otorgado uno o más de estos alcances a tu app, estarás listo para obtener las organizaciones de éste.

Al igual que hicimos al descubrir repositorios anteriormente, empezaremos por requerir la biblioteca Ruby [GitHub's Octokit.rb](https://github.com/octokit/octokit.rb) y configurarla para que nos ocupe de la paginación. Para obtener más información sobre la paginación, consulta [Uso de la paginación en la API de REST](/es/enterprise-server@3.22/rest/using-the-rest-api/using-pagination-in-the-rest-api).

```ruby
require 'octokit'

Octokit.auto_paginate = true
```

Después, se pasará el [token de OAuth de la aplicación para un usuario determinado](/es/enterprise-server@3.22/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#making-authenticated-requests) a fin de inicializar el cliente de API:

```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"]
```

Luego, se pueden [enumerar las organizaciones a las que la aplicación puede acceder para el usuario](/es/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
```

### Devuelve todas las membresías de organización del usuario

Si ha leído toda la documentación, es posible que haya observado un [método de API para enumerar las pertenencias a organizaciones públicas de un usuario](/es/enterprise-server@3.22/rest/orgs/orgs#list-organizations-for-a-user). La mayoría de las aplicaciones deberían evitar este método de la API. Este método solo devuelve las membrecías de las organizaciones públicas del usuario y no sus membrecías de organizaciones privadas.

Como aplicación, habitualmente querrás obtener todas las organizaciones de los usuarios a las cuales tu app tiene acceso autorizado. El flujo de trabajo anterior te proporcionará exactamente eso.