Escopos
O que cada permissão alcança, e as que faltam de propósito.
Uma chave carrega um conjunto de escopos, e uma requisição fora desse conjunto é recusada antes de chegar ao banco. Peça os menos que resolvem: uma chave é mais fácil de entregar, e mais barata de perder, quando pode menos.
| Escopo | Alcança |
|---|---|
lists.read | Premiações |
lists.write | Premiações |
profile.read | Catálogo |
catalog.read | Catálogo |
profile.write | Perfil |
library.read | Biblioteca |
library.write | Biblioteca |
reviews.read | Avaliações |
reviews.write | Avaliações |
journal.read | Diário |
journal.write | Diário |
screenshots.read | Capturas |
screenshots.write | Capturas |
social.read | Social |
social.write | Social |
comments.read | Comentários |
comments.write | Comentários |
likes.write | Curtidas |
Escopos se chamam <recurso>.<read|write>. O conjunto que uma chave pode ter é
uma constraint no banco, e não uma lista no código da aplicação, então um escopo
que não existe não pode ser guardado por caminho nenhum, inclusive um escrito
depois que esqueça de checar.
Ausentes de propósito
Sem escopo de comentários. Comentário é a superfície por onde o abuso chega, e uma API de publicar é uma API de abuso. Ela espera até existir um motivo.
- Sem escopo de moderação. Poder de moderador não se delega a uma chave.
- Sem exclusão de conta. Isso passa por segundo fator e confirmação digitada, e uma chave não é nenhum dos dois.
- Nada alcança o dado privado de outra conta.
social.readdevolve quem o dono segue, não o que essas pessoas têm. - Sem escopo do Arcade. Nesta fase nenhum escopo abre o Arcade a uma
chave. O
identifydo Arcade é o consentimento de um jogador dentro do SDK, e não um escopo de chave.
catalog.read é diferente
É o único escopo que não toca o dado de ninguém, e o que a maioria das integrações realmente quer. Funciona numa chave que não tem mais nada, exatamente a chave certa para um bot que só consulta jogos.
A única exceção são os filtros da busca sobre os jogos do próprio dono
(played, library, unplayed, wishlist e hideIgnored em
GET /api/v1/games): eles leem a biblioteca, então pedem também
library.read. Sem esses filtros, a busca não toca nada de ninguém.