🚀 5.4 Adicione regras de permissão ao seu ContentProvider

Por padrão, um ContentProvider não possui permissões, o que significa que qualquer app no dispositivo poderia ler ou escrever nos seus dados de viagens. Para proteger as informações do BoaViagem, devemos implementar regras de acesso no AndroidManifest.xml.

Declarando Permissões Customizadas

Utilizamos o elemento <permission> para definir nomes únicos baseados no pacote da aplicação:

<permission 
    android:name="br.com.casadocodigo.boaviagem.provider.permission.READ" 
    android:protectionLevel="dangerous" />
 
<permission 
    android:name="br.com.casadocodigo.boaviagem.provider.permission.WRITE" 
    android:protectionLevel="dangerous" />

Aplicando ao Provedor

No elemento <provider>, restringimos o acesso de leitura e escrita:

<provider
    android:name=".provider.BoaViagemProvider"
    android:authorities="br.com.casadocodigo.boaviagem.provider"
    android:readPermission="br.com.casadocodigo.boaviagem.provider.permission.READ"
    android:writePermission="br.com.casadocodigo.boaviagem.provider.permission.WRITE"
    android:exported="true" />

O Desafio da Visibilidade de Pacotes (Android 11+)

IMPORTANT

Android 11+ (API 30): Mesmo com permissões corretas, um aplicativo externo não conseguirá “enxergar” seu provedor a menos que ele declare expressamente no próprio manifesto que deseja interagir com a sua autoridade:

<queries>
    <package android:name="br.com.casadocodigo.boaviagem" />
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="content" android:host="br.com.casadocodigo.boaviagem.provider" />
</queries>

5.5 Conclusão do Módulo 4.5

Neste módulo, exploramos a compartilhamento de dados:

  1. Fundamentos: Entendemos o papel do ContentProvider como abstração de dados.
  2. URIs: Aprendemos a estruturar caminhos de acesso únicos.
  3. Segurança: Implementamos Runtime Permissions para acessar contatos.
  4. Custom Provider: Criamos nosso próprio provedor integrado ao Room.
  5. Permissões: Protegemos o BoaViagem contra acessos não autorizados.

No próximo módulo, aprenderemos a levar nossos dados para as nuvens, conectando o aplicativo a Web Services de forma eficiente!


⬅️ Capítulo Anterior | Próximo Capítulo ➡️