# PlatformException: PERMISSION_DENIED, The operation was denied because the permission scope is insufficient

- **ID:** `flutter/insufficient-permission-scope`
- **Domain:** flutter
- **Category:** auth_error
- **Error Code:** `PERMISSION_DENIED`
- **Verification:** ai_generated
- **Fix Rate:** 90%

## Root Cause

A platform-specific permission (e.g., camera, location, storage) was requested but the user granted only a limited scope, or the permission was not declared in the app manifest.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| Flutter 3.19 | active | — | — |
| Dart 3.3 | active | — | — |
| Android 14 | active | — | — |
| iOS 17.2 | active | — | — |

## Workarounds

1. **Use the permission_handler package to explicitly request the permission and check the status before performing the operation. Example: `final status = await Permission.camera.request(); if (status.isGranted) { // proceed } else { // show rationale }`** (90% success)
   ```
   Use the permission_handler package to explicitly request the permission and check the status before performing the operation. Example: `final status = await Permission.camera.request(); if (status.isGranted) { // proceed } else { // show rationale }`
   ```
2. **Declare the exact permission in AndroidManifest.xml (e.g., <uses-permission android:name="android.permission.CAMERA" />) and in Info.plist (e.g., NSCameraUsageDescription).** (95% success)
   ```
   Declare the exact permission in AndroidManifest.xml (e.g., <uses-permission android:name="android.permission.CAMERA" />) and in Info.plist (e.g., NSCameraUsageDescription).
   ```
3. **For Android 14+ granular media permissions, request each sub-permission (e.g., ACCESS_MEDIA_LOCATION) separately using the `photo_manager` or similar package that handles scoped storage.** (80% success)
   ```
   For Android 14+ granular media permissions, request each sub-permission (e.g., ACCESS_MEDIA_LOCATION) separately using the `photo_manager` or similar package that handles scoped storage.
   ```

## Dead Ends

- **** — Over-declaring permissions may cause app store rejection or user distrust; also, runtime permission requests still require user consent and proper handling. (50% fail)
- **** — Ignoring the result means the app proceeds without the required permission, leading to the same exception when the operation is attempted. (75% fail)
- **** — Lowering compileSdkVersion may introduce security vulnerabilities and prevent use of newer APIs; it also does not resolve runtime permission denials on newer devices. (85% fail)
