apache-airflow-providers-fab 2.0.0rc2__tar.gz → 2.0.0rc4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. apache_airflow_providers_fab-2.0.0rc4/3rd-party-licenses/LICENSES-ui.txt +87 -0
  2. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/PKG-INFO +5 -3
  3. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/README.rst +2 -1
  4. apache_airflow_providers_fab-2.0.0rc4/docs/api-ref/fab-public-api-ref.rst +23 -0
  5. apache_airflow_providers_fab-2.0.0rc4/docs/api-ref/fab-token-api-ref.rst +22 -0
  6. apache_airflow_providers_fab-2.0.0rc4/docs/auth-manager/access-control.rst +362 -0
  7. apache_airflow_providers_fab-2.0.0rc4/docs/auth-manager/api-authentication.rst +135 -0
  8. apache_airflow_providers_fab-2.0.0rc4/docs/auth-manager/index.rst +39 -0
  9. apache_airflow_providers_fab-2.0.0rc4/docs/auth-manager/security.rst +105 -0
  10. apache_airflow_providers_fab-2.0.0rc4/docs/auth-manager/token.rst +42 -0
  11. apache_airflow_providers_fab-2.0.0rc4/docs/auth-manager/webserver-authentication.rst +318 -0
  12. apache_airflow_providers_fab-2.0.0rc4/docs/changelog.rst +465 -0
  13. apache_airflow_providers_fab-2.0.0rc4/docs/cli-ref.rst +29 -0
  14. apache_airflow_providers_fab-2.0.0rc4/docs/commits.rst +476 -0
  15. apache_airflow_providers_fab-2.0.0rc4/docs/conf.py +27 -0
  16. apache_airflow_providers_fab-2.0.0rc4/docs/configurations-ref.rst +19 -0
  17. apache_airflow_providers_fab-2.0.0rc4/docs/img/add-role.png +0 -0
  18. apache_airflow_providers_fab-2.0.0rc4/docs/img/diagram_fab_auth_manager_airflow_architecture.md5sum +1 -0
  19. apache_airflow_providers_fab-2.0.0rc4/docs/img/diagram_fab_auth_manager_airflow_architecture.png +0 -0
  20. apache_airflow_providers_fab-2.0.0rc4/docs/img/diagram_fab_auth_manager_airflow_architecture.py +74 -0
  21. apache_airflow_providers_fab-2.0.0rc4/docs/img/new-role.png +0 -0
  22. apache_airflow_providers_fab-2.0.0rc4/docs/index.rst +150 -0
  23. apache_airflow_providers_fab-2.0.0rc4/docs/installing-providers-from-sources.rst +18 -0
  24. apache_airflow_providers_fab-2.0.0rc4/docs/migrations-ref.rst +44 -0
  25. apache_airflow_providers_fab-2.0.0rc4/docs/security.rst +18 -0
  26. apache_airflow_providers_fab-2.0.0rc4/docs/upgrading.rst +63 -0
  27. apache_airflow_providers_fab-2.0.0rc4/provider.yaml +122 -0
  28. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/pyproject.toml +19 -6
  29. apache_airflow_providers_fab-2.0.0rc4/src/airflow/__init__.py +17 -0
  30. apache_airflow_providers_fab-2.0.0rc4/src/airflow/providers/3rd-party-licenses/LICENSES-ui.txt +62 -0
  31. apache_airflow_providers_fab-2.0.0rc4/src/airflow/providers/__init__.py +17 -0
  32. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/__init__.py +2 -2
  33. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/cli_commands/utils.py +1 -1
  34. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/fab_auth_manager.py +5 -2
  35. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/security_manager/override.py +132 -1
  36. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/get_provider_info.py +22 -37
  37. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/app.py +8 -0
  38. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/extensions/init_appbuilder.py +4 -0
  39. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/extensions/init_session.py +2 -2
  40. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/package-lock.json +20 -732
  41. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/package.json +3 -3
  42. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/utils.py +16 -0
  43. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/views.py +1 -1
  44. apache_airflow_providers_fab-2.0.0rc4/tests/conftest.py +19 -0
  45. apache_airflow_providers_fab-2.0.0rc4/tests/unit/__init__.py +17 -0
  46. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/__init__.py +17 -0
  47. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/__init__.py +17 -0
  48. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/api/__init__.py +17 -0
  49. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/api/auth/__init__.py +16 -0
  50. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/api/auth/backend/__init__.py +16 -0
  51. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/api/auth/backend/test_basic_auth.py +110 -0
  52. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/api/auth/backend/test_kerberos_auth.py +27 -0
  53. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/api/auth/backend/test_session.py +67 -0
  54. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/api_endpoints/__init__.py +16 -0
  55. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/api_endpoints/api_connexion_utils.py +127 -0
  56. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/api_endpoints/remote_user_api_auth_backend.py +83 -0
  57. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/api_endpoints/test_auth.py +79 -0
  58. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/api_endpoints/test_role_and_permission_endpoint.py +579 -0
  59. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/api_endpoints/test_user_endpoint.py +816 -0
  60. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/api_fastapi/__init__.py +16 -0
  61. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/api_fastapi/conftest.py +32 -0
  62. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/api_fastapi/routes/__init__.py +16 -0
  63. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/api_fastapi/routes/test_login.py +52 -0
  64. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/api_fastapi/services/__init__.py +17 -0
  65. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/api_fastapi/services/test_login.py +105 -0
  66. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/cli_commands/__init__.py +16 -0
  67. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/cli_commands/test_db_command.py +149 -0
  68. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/cli_commands/test_definition.py +37 -0
  69. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/cli_commands/test_role_command.py +232 -0
  70. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/cli_commands/test_sync_perm_command.py +75 -0
  71. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/cli_commands/test_user_command.py +546 -0
  72. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/cli_commands/test_utils.py +84 -0
  73. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/conftest.py +101 -0
  74. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/models/__init__.py +17 -0
  75. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/models/test_anonymous_user.py +37 -0
  76. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/models/test_db.py +135 -0
  77. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/schemas/__init__.py +17 -0
  78. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/schemas/test_role_and_permission_schema.py +107 -0
  79. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/schemas/test_user_schema.py +148 -0
  80. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/security_manager/__init__.py +16 -0
  81. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/security_manager/test_constants.py +33 -0
  82. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/security_manager/test_override.py +77 -0
  83. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/test_fab_auth_manager.py +636 -0
  84. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/test_models.py +65 -0
  85. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/test_security.py +1109 -0
  86. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/views/__init__.py +34 -0
  87. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/views/test_permissions.py +89 -0
  88. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/views/test_roles_list.py +75 -0
  89. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/views/test_user.py +75 -0
  90. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/views/test_user_edit.py +74 -0
  91. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/auth_manager/views/test_user_stats.py +74 -0
  92. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/decorators.py +63 -0
  93. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/utils.py +256 -0
  94. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/www/__init__.py +17 -0
  95. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/www/test_auth.py +248 -0
  96. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/www/test_utils.py +40 -0
  97. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/www/views/__init__.py +17 -0
  98. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/www/views/conftest.py +124 -0
  99. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/www/views/test_connection_form_fields.py +163 -0
  100. apache_airflow_providers_fab-2.0.0rc4/tests/unit/fab/www/views/test_views_custom_user_views.py +344 -0
  101. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/LICENSE +0 -0
  102. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/alembic.ini +0 -0
  103. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/__init__.py +0 -0
  104. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/api/__init__.py +0 -0
  105. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/api/auth/__init__.py +0 -0
  106. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/api/auth/backend/__init__.py +0 -0
  107. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/api/auth/backend/basic_auth.py +0 -0
  108. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/api/auth/backend/kerberos_auth.py +0 -0
  109. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/api/auth/backend/session.py +0 -0
  110. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/api_endpoints/__init__.py +0 -0
  111. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/api_endpoints/role_and_permission_endpoint.py +0 -0
  112. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/api_endpoints/user_endpoint.py +0 -0
  113. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/api_fastapi/__init__.py +0 -0
  114. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/api_fastapi/datamodels/__init__.py +0 -0
  115. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/api_fastapi/datamodels/login.py +0 -0
  116. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/api_fastapi/openapi/__init__.py +0 -0
  117. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/api_fastapi/openapi/v1-generated.yaml +0 -0
  118. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/api_fastapi/routes/__init__.py +0 -0
  119. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/api_fastapi/routes/login.py +0 -0
  120. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/api_fastapi/services/__init__.py +0 -0
  121. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/api_fastapi/services/login.py +0 -0
  122. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/cli_commands/__init__.py +0 -0
  123. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/cli_commands/db_command.py +0 -0
  124. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/cli_commands/definition.py +0 -0
  125. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/cli_commands/role_command.py +0 -0
  126. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/cli_commands/sync_perm_command.py +0 -0
  127. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/cli_commands/user_command.py +0 -0
  128. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/models/__init__.py +0 -0
  129. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/models/anonymous_user.py +0 -0
  130. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/models/db.py +0 -0
  131. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/openapi/__init__.py +0 -0
  132. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/openapi/v1.yaml +0 -0
  133. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/schemas/__init__.py +0 -0
  134. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/schemas/role_and_permission_schema.py +0 -0
  135. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/schemas/user_schema.py +0 -0
  136. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/security_manager/__init__.py +0 -0
  137. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/security_manager/constants.py +0 -0
  138. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/views/__init__.py +0 -0
  139. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/views/permissions.py +0 -0
  140. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/views/roles_list.py +0 -0
  141. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/views/user.py +0 -0
  142. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/views/user_edit.py +0 -0
  143. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/auth_manager/views/user_stats.py +0 -0
  144. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/migrations/README +0 -0
  145. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/migrations/__init__.py +0 -0
  146. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/migrations/env.py +0 -0
  147. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/migrations/script.py.mako +0 -0
  148. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/migrations/versions/0001_1_4_0_placeholder_migration.py +0 -0
  149. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/migrations/versions/__init__.py +0 -0
  150. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/__init__.py +0 -0
  151. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/airflow_flask_app.py +0 -0
  152. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/api_connexion/__init__.py +0 -0
  153. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/api_connexion/exceptions.py +0 -0
  154. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/api_connexion/parameters.py +0 -0
  155. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/api_connexion/security.py +0 -0
  156. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/api_connexion/types.py +0 -0
  157. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/auth.py +0 -0
  158. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/constants.py +0 -0
  159. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/extensions/__init__.py +0 -0
  160. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/extensions/init_jinja_globals.py +0 -0
  161. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/extensions/init_manifest_files.py +0 -0
  162. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/extensions/init_security.py +0 -0
  163. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/extensions/init_views.py +0 -0
  164. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/security/__init__.py +0 -0
  165. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/security/permissions.py +0 -0
  166. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/security_appless.py +0 -0
  167. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/security_manager.py +0 -0
  168. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/session.py +0 -0
  169. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/css/bootstrap-theme.css +0 -0
  170. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/css/flash.css +0 -0
  171. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/css/loading-dots.css +0 -0
  172. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/css/main.css +0 -0
  173. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/css/material-icons.css +0 -0
  174. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/dist/48f0ea180c40270a5b05.png +0 -0
  175. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/dist/649c0b07771e68fafdeb.png +0 -0
  176. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.feec4a4075c2f3d6ae01.css +0 -0
  177. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.feec4a4075c2f3d6ae01.js +0 -0
  178. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/dist/f7490d556a6c42e49ba4.png +0 -0
  179. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/dist/flash.137b30cff85b5588e661.css +0 -0
  180. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/dist/flash.137b30cff85b5588e661.js +0 -0
  181. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/dist/jquery-ui.min.css +0 -0
  182. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/dist/jquery-ui.min.js +0 -0
  183. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/dist/jquery-ui.min.js.LICENSE.txt +0 -0
  184. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/dist/loadingDots.48ab7d5b04e66f2686b0.css +0 -0
  185. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/dist/loadingDots.48ab7d5b04e66f2686b0.js +0 -0
  186. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/dist/main.edb2d40dfbbc537916e3.css +0 -0
  187. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/dist/main.edb2d40dfbbc537916e3.js +0 -0
  188. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/dist/main.edb2d40dfbbc537916e3.js.LICENSE.txt +0 -0
  189. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/dist/manifest.json +0 -0
  190. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/dist/materialIcons.57390fa60d8f61175334.css +0 -0
  191. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/dist/materialIcons.57390fa60d8f61175334.js +0 -0
  192. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/dist/moment.624b1f00ba723d39ce06.js +0 -0
  193. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/dist/moment.624b1f00ba723d39ce06.js.LICENSE.txt +0 -0
  194. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/dist/oss-licenses.json +0 -0
  195. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/js/datetime_utils.js +0 -0
  196. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/js/main.js +0 -0
  197. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/sort_asc.png +0 -0
  198. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/sort_both.png +0 -0
  199. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/static/sort_desc.png +0 -0
  200. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/templates/airflow/_messages.html +0 -0
  201. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/templates/airflow/error.html +0 -0
  202. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/templates/airflow/main.html +0 -0
  203. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/templates/airflow/traceback.html +0 -0
  204. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/templates/appbuilder/flash.html +0 -0
  205. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/templates/appbuilder/index.html +0 -0
  206. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/templates/appbuilder/navbar.html +0 -0
  207. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/templates/appbuilder/navbar_menu.html +0 -0
  208. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/templates/appbuilder/navbar_right.html +0 -0
  209. {apache_airflow_providers_fab-2.0.0rc2 → apache_airflow_providers_fab-2.0.0rc4}/src/airflow/providers/fab/www/webpack.config.js +0 -0
@@ -0,0 +1,87 @@
1
+ Apache Airflow
2
+ Copyright 2016-2025 The Apache Software Foundation
3
+
4
+ This product includes software developed at The Apache Software
5
+ Foundation (http://www.apache.org/).
6
+
7
+ =======================================================================
8
+ css-loader|5.2.7:
9
+ -----
10
+ MIT
11
+ Copyright JS Foundation and other contributors
12
+
13
+ Permission is hereby granted, free of charge, to any person obtaining
14
+ a copy of this software and associated documentation files (the
15
+ 'Software'), to deal in the Software without restriction, including
16
+ without limitation the rights to use, copy, modify, merge, publish,
17
+ distribute, sublicense, and/or sell copies of the Software, and to
18
+ permit persons to whom the Software is furnished to do so, subject to
19
+ the following conditions:
20
+
21
+ The above copyright notice and this permission notice shall be
22
+ included in all copies or substantial portions of the Software.
23
+
24
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
25
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
27
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
28
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
29
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
30
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31
+
32
+ webpack-contrib/css-loader
33
+
34
+
35
+ moment|2.30.1:
36
+ -----
37
+ MIT
38
+ Copyright (c) JS Foundation and other contributors
39
+
40
+ Permission is hereby granted, free of charge, to any person
41
+ obtaining a copy of this software and associated documentation
42
+ files (the "Software"), to deal in the Software without
43
+ restriction, including without limitation the rights to use,
44
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
45
+ copies of the Software, and to permit persons to whom the
46
+ Software is furnished to do so, subject to the following
47
+ conditions:
48
+
49
+ The above copyright notice and this permission notice shall be
50
+ included in all copies or substantial portions of the Software.
51
+
52
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
53
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
54
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
55
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
56
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
57
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
58
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
59
+ OTHER DEALINGS IN THE SOFTWARE.
60
+
61
+ https://github.com/moment/moment.git
62
+
63
+
64
+ moment-timezone|0.5.46:
65
+ -----
66
+ MIT
67
+ The MIT License (MIT)
68
+
69
+ Copyright (c) JS Foundation and other contributors
70
+
71
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
72
+ this software and associated documentation files (the "Software"), to deal in
73
+ the Software without restriction, including without limitation the rights to
74
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
75
+ the Software, and to permit persons to whom the Software is furnished to do so,
76
+ subject to the following conditions:
77
+
78
+ The above copyright notice and this permission notice shall be included in all
79
+ copies or substantial portions of the Software.
80
+
81
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
82
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
83
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
84
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
85
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
86
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
87
+ https://github.com/moment/moment-timezone.git
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apache-airflow-providers-fab
3
- Version: 2.0.0rc2
3
+ Version: 2.0.0rc4
4
4
  Summary: Provider package apache-airflow-providers-fab for Apache Airflow
5
5
  Keywords: airflow-provider,fab,airflow,integration
6
6
  Author-email: Apache Software Foundation <dev@airflow.apache.org>
@@ -20,7 +20,7 @@ Classifier: Programming Language :: Python :: 3.10
20
20
  Classifier: Programming Language :: Python :: 3.11
21
21
  Classifier: Programming Language :: Python :: 3.12
22
22
  Classifier: Topic :: System :: Monitoring
23
- Requires-Dist: apache-airflow>=3.0.0.dev0
23
+ Requires-Dist: apache-airflow>=3.0.0rc0
24
24
  Requires-Dist: apache-airflow-providers-common-compat>=1.2.1rc0
25
25
  Requires-Dist: blinker>=1.6.2
26
26
  Requires-Dist: flask>=2.2.1,<2.3
@@ -31,6 +31,7 @@ Requires-Dist: flask-wtf>=1.1.0
31
31
  Requires-Dist: connexion[flask]>=2.14.2,<3.0
32
32
  Requires-Dist: jmespath>=0.7.0
33
33
  Requires-Dist: werkzeug>=2.2,<4
34
+ Requires-Dist: wtforms>=3.0,<4
34
35
  Requires-Dist: kerberos>=1.3.0 ; extra == "kerberos"
35
36
  Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
36
37
  Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-fab/2.0.0/changelog.html
@@ -96,7 +97,7 @@ Requirements
96
97
  ========================================== ==================
97
98
  PIP package Version required
98
99
  ========================================== ==================
99
- ``apache-airflow`` ``>=3.0.0.dev0``
100
+ ``apache-airflow`` ``>=3.0.0``
100
101
  ``apache-airflow-providers-common-compat`` ``>=1.2.1``
101
102
  ``blinker`` ``>=1.6.2``
102
103
  ``flask`` ``>=2.2.1,<2.3``
@@ -107,6 +108,7 @@ PIP package Version required
107
108
  ``connexion[flask]`` ``>=2.14.2,<3.0``
108
109
  ``jmespath`` ``>=0.7.0``
109
110
  ``werkzeug`` ``>=2.2,<4``
111
+ ``wtforms`` ``>=3.0,<4``
110
112
  ========================================== ==================
111
113
 
112
114
  Cross provider package dependencies
@@ -53,7 +53,7 @@ Requirements
53
53
  ========================================== ==================
54
54
  PIP package Version required
55
55
  ========================================== ==================
56
- ``apache-airflow`` ``>=3.0.0.dev0``
56
+ ``apache-airflow`` ``>=3.0.0``
57
57
  ``apache-airflow-providers-common-compat`` ``>=1.2.1``
58
58
  ``blinker`` ``>=1.6.2``
59
59
  ``flask`` ``>=2.2.1,<2.3``
@@ -64,6 +64,7 @@ PIP package Version required
64
64
  ``connexion[flask]`` ``>=2.14.2,<3.0``
65
65
  ``jmespath`` ``>=0.7.0``
66
66
  ``werkzeug`` ``>=2.2,<4``
67
+ ``wtforms`` ``>=3.0,<4``
67
68
  ========================================== ==================
68
69
 
69
70
  Cross provider package dependencies
@@ -0,0 +1,23 @@
1
+
2
+ .. Licensed to the Apache Software Foundation (ASF) under one
3
+ or more contributor license agreements. See the NOTICE file
4
+ distributed with this work for additional information
5
+ regarding copyright ownership. The ASF licenses this file
6
+ to you under the Apache License, Version 2.0 (the
7
+ "License"); you may not use this file except in compliance
8
+ with the License. You may obtain a copy of the License at
9
+
10
+ .. http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ .. Unless required by applicable law or agreed to in writing,
13
+ software distributed under the License is distributed on an
14
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ KIND, either express or implied. See the License for the
16
+ specific language governing permissions and limitations
17
+ under the License.
18
+
19
+ FAB auth manager API
20
+ ====================
21
+
22
+ It's a stub file. It will be converted automatically during the build process
23
+ to the valid documentation by the Sphinx plugin. See: /docs/conf.py
@@ -0,0 +1,22 @@
1
+
2
+ .. Licensed to the Apache Software Foundation (ASF) under one
3
+ or more contributor license agreements. See the NOTICE file
4
+ distributed with this work for additional information
5
+ regarding copyright ownership. The ASF licenses this file
6
+ to you under the Apache License, Version 2.0 (the
7
+ "License"); you may not use this file except in compliance
8
+ with the License. You may obtain a copy of the License at
9
+
10
+ .. http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ .. Unless required by applicable law or agreed to in writing,
13
+ software distributed under the License is distributed on an
14
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ KIND, either express or implied. See the License for the
16
+ specific language governing permissions and limitations
17
+ under the License.
18
+
19
+ FAB auth manager token API
20
+ ==========================
21
+
22
+ It's a stub file. It will be automatically converted during the build process into valid documentation by the Sphinx plugin. See: /docs/conf.py
@@ -0,0 +1,362 @@
1
+ .. Licensed to the Apache Software Foundation (ASF) under one
2
+ or more contributor license agreements. See the NOTICE file
3
+ distributed with this work for additional information
4
+ regarding copyright ownership. The ASF licenses this file
5
+ to you under the Apache License, Version 2.0 (the
6
+ "License"); you may not use this file except in compliance
7
+ with the License. You may obtain a copy of the License at
8
+
9
+ .. http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ .. Unless required by applicable law or agreed to in writing,
12
+ software distributed under the License is distributed on an
13
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ KIND, either express or implied. See the License for the
15
+ specific language governing permissions and limitations
16
+ under the License.
17
+
18
+ Access Control with FAB auth manager
19
+ ====================================
20
+
21
+ FAB auth manager access control is handled by Flask AppBuilder (FAB).
22
+ Please read its related `security document <http://flask-appbuilder.readthedocs.io/en/latest/security.html>`_
23
+ regarding its security model.
24
+
25
+ .. spelling:word-list::
26
+ clearTaskInstances
27
+ dagRuns
28
+ dagSources
29
+ eventLogs
30
+ importErrors
31
+ taskInstances
32
+ xcomEntries
33
+
34
+ Default Roles
35
+ '''''''''''''
36
+ FAB auth manager ships with a set of roles by default: Admin, User, Op, Viewer, and Public.
37
+ By default, only ``Admin`` users can configure/alter permissions for roles. However,
38
+ it is recommended that these default roles remain unaltered, and instead ``Admin`` users
39
+ create new roles with the desired permissions if changes are necessary.
40
+
41
+ Public
42
+ ^^^^^^
43
+ ``Public`` users (anonymous) don't have any permissions.
44
+
45
+ Viewer
46
+ ^^^^^^
47
+ ``Viewer`` users have limited read permissions:
48
+
49
+ .. exampleinclude:: /../../fab/src/airflow/providers/fab/auth_manager/security_manager/override.py
50
+ :language: python
51
+ :start-after: [START security_viewer_perms]
52
+ :end-before: [END security_viewer_perms]
53
+
54
+ User
55
+ ^^^^
56
+ ``User`` users have ``Viewer`` permissions plus additional permissions:
57
+
58
+ .. exampleinclude:: /../../fab/src/airflow/providers/fab/auth_manager/security_manager/override.py
59
+ :language: python
60
+ :start-after: [START security_user_perms]
61
+ :end-before: [END security_user_perms]
62
+
63
+ Op
64
+ ^^
65
+ ``Op`` users have ``User`` permissions plus additional permissions:
66
+
67
+ .. exampleinclude:: /../../fab/src/airflow/providers/fab/auth_manager/security_manager/override.py
68
+ :language: python
69
+ :start-after: [START security_op_perms]
70
+ :end-before: [END security_op_perms]
71
+
72
+ Admin
73
+ ^^^^^
74
+ ``Admin`` users have all possible permissions, including granting or revoking permissions from
75
+ other users. ``Admin`` users have ``Op`` permission plus additional permissions:
76
+
77
+ .. exampleinclude:: /../../fab/src/airflow/providers/fab/auth_manager/security_manager/override.py
78
+ :language: python
79
+ :start-after: [START security_admin_perms]
80
+ :end-before: [END security_admin_perms]
81
+
82
+ Custom Roles
83
+ '''''''''''''
84
+
85
+ DAG Level Role
86
+ ^^^^^^^^^^^^^^
87
+ ``Admin`` can create a set of roles which are only allowed to view a certain set of DAGs. This is called DAG level access. Each DAG defined in the DAG model table
88
+ is treated as a ``View`` which has two permissions associated with it (``can_read`` and ``can_edit``. ``can_dag_read`` and ``can_dag_edit`` are deprecated since 2.0.0).
89
+ There is a special view called ``DAGs`` (it was called ``all_dags`` in versions 1.10.*) which
90
+ allows the role to access all the DAGs. The default ``Admin``, ``Viewer``, ``User``, ``Op`` roles can all access ``DAGs`` view.
91
+
92
+ .. image:: /img/add-role.png
93
+ .. image:: /img/new-role.png
94
+
95
+ The image shows the creation of a role which can only write to
96
+ ``example_python_operator``. You can also create roles via the CLI
97
+ using the ``airflow roles create`` command, e.g.:
98
+
99
+ .. code-block:: bash
100
+
101
+ airflow roles create Role1 Role2
102
+
103
+ And we could assign the given role to a new user using the ``airflow
104
+ users add-role`` CLI command.
105
+
106
+
107
+ Permissions
108
+ '''''''''''
109
+
110
+
111
+ .. warning::
112
+
113
+ FAB auth manager allows you to define custom Roles with fine-grained RBAC permissions for users. However, not all
114
+ combinations of permissions are fully consistent, and there is no mechanism to make sure that the set of
115
+ permissions assigned is fully consistent. There are a number of cases where permissions for
116
+ particular resources are overlapping. A good example is menu access permissions - a lack of menu access
117
+ does not automatically disable access to the functionality the menu is pointing at. Another example is access
118
+ to the Role view, which allows access to User information even if the user does not have "user view" access.
119
+ It is simply inconsistent to add access to Roles when you have no access to users.
120
+
121
+ When you decide to use a custom set of resource-based permissions, the Deployment Manager should carefully
122
+ review if the final set of permissions granted to roles is what they expect.
123
+
124
+
125
+ Resource-Based permissions
126
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^
127
+
128
+ Permissions are based on individual resources and a small subset of actions on those
129
+ resources. Resources match standard Airflow concepts, such as ``Dag``, ``DagRun``, ``Task``, and
130
+ ``Connection``. Actions include ``can_create``, ``can_read``, ``can_edit``, and ``can_delete``.
131
+
132
+ Permissions (each consistent of a resource + action pair) are then added to roles.
133
+
134
+ **To access an endpoint, the user needs all permissions assigned to that endpoint**
135
+
136
+ There are five default roles: Public, Viewer, User, Op, and Admin. Each one has the permissions of the preceding role, as well as additional permissions.
137
+
138
+ DAG-level permissions
139
+ ^^^^^^^^^^^^^^^^^^^^^
140
+
141
+ For DAG-level permissions exclusively, access can be controlled at the level of all DAGs or individual DAG objects.
142
+ This includes ``DAGs.can_read``, ``DAGs.can_edit``, ``DAGs.can_delete``, ``DAG Runs.can_read``, ``DAG Runs.can_create``, ``DAG Runs.can_delete``, and ``DAG Runs.menu_access``.
143
+ When these permissions are listed, access is granted to users who either have the listed permission or the same permission for the specific DAG being acted upon.
144
+ For individual DAGs, the resource name is ``DAG:`` + the DAG ID, or for the DAG Runs resource the resource name is ``DAG Run:``.
145
+
146
+ For example, if a user is trying to view DAG information for the ``example_dag_id``, and the endpoint requires ``DAGs.can_read`` access, access will be granted if the user has either ``DAGs.can_read`` or ``DAG:example_dag_id.can_read`` access.
147
+
148
+ ================================================================================== ====== ================================================================= ============
149
+ Stable API Permissions
150
+ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
151
+ Endpoint Method Permissions Minimum Role
152
+ ================================================================================== ====== ================================================================= ============
153
+ /config GET Configurations.can_read Op
154
+ /connections GET Connections.can_read Op
155
+ /connections POST Connections.can_create Op
156
+ /connections/{connection_id} DELETE Connections.can_delete Op
157
+ /connections/{connection_id} PATCH Connections.can_edit Op
158
+ /connections/{connection_id} GET Connections.can_read Op
159
+ /dagSources/{file_token} GET DAG Code.can_read Viewer
160
+ /dags GET DAGs.can_read Viewer
161
+ /dags/{dag_id} GET DAGs.can_read Viewer
162
+ /dags/{dag_id} PATCH DAGs.can_edit User
163
+ /dags/{dag_id}/clearTaskInstances PUT DAGs.can_edit, DAG Runs.can_edit, Task Instances.can_edit User
164
+ /dags/{dag_id}/details GET DAGs.can_read Viewer
165
+ /dags/{dag_id}/tasks GET DAGs.can_read, Task Instances.can_read Viewer
166
+ /dags/{dag_id}/tasks/{task_id} GET DAGs.can_read, Task Instances.can_read Viewer
167
+ /dags/{dag_id}/dagRuns GET DAGs.can_read, DAG Runs.can_read Viewer
168
+ /dags/{dag_id}/dagRuns POST DAGs.can_edit, DAG Runs.can_create User
169
+ /dags/{dag_id}/dagRuns/{dag_run_id} DELETE DAGs.can_edit, DAG Runs.can_delete User
170
+ /dags/{dag_id}/dagRuns/{dag_run_id} GET DAGs.can_read, DAG Runs.can_read Viewer
171
+ /dags/~/dagRuns/list POST DAGs.can_edit, DAG Runs.can_read User
172
+ /assets GET Assets.can_read Viewer
173
+ /assets/{uri} GET Assets.can_read Viewer
174
+ /assets/events GET Assets.can_read Viewer
175
+ /eventLogs GET Audit Logs.can_read Viewer
176
+ /eventLogs/{event_log_id} GET Audit Logs.can_read Viewer
177
+ /importErrors GET ImportError.can_read Viewer
178
+ /importErrors/{import_error_id} GET ImportError.can_read Viewer
179
+ /health GET None Public
180
+ /version GET None Public
181
+ /pools GET Pools.can_read Op
182
+ /pools POST Pools.can_create Op
183
+ /pools/{pool_name} DELETE Pools.can_delete Op
184
+ /pools/{pool_name} GET Pools.can_read Op
185
+ /pools/{pool_name} PATCH Pools.can_edit Op
186
+ /providers GET Providers.can_read Op
187
+ /dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances GET DAGs.can_read, DAG Runs.can_read, Task Instances.can_read Viewer
188
+ /dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id} GET DAGs.can_read, DAG Runs.can_read, Task Instances.can_read Viewer
189
+ /dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/links GET DAGs.can_read, DAG Runs.can_read, Task Instances.can_read Viewer
190
+ /dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/logs/{task_try_number} GET DAGs.can_read, DAG Runs.can_read, Task Instances.can_read Viewer
191
+ /dags/~/dagRuns/~/taskInstances/list POST DAGs.can_edit, DAG Runs.can_read, Task Instances.can_read User
192
+ /variables GET Variables.can_read Op
193
+ /variables POST Variables.can_create Op
194
+ /variables/{variable_key} DELETE Variables.can_delete Op
195
+ /variables/{variable_key} GET Variables.can_read Op
196
+ /variables/{variable_key} PATCH Variables.can_edit Op
197
+ /dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/xcomEntries GET DAGs.can_read, DAG Runs.can_read, Viewer
198
+ Task Instances.can_read, XComs.can_read
199
+ /dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/xcomEntries/{xcom_key} GET DAGs.can_read, DAG Runs.can_read, Viewer
200
+ Task Instances.can_read, XComs.can_read
201
+ /users GET Users.can_read Admin
202
+ /users POST Users.can_create Admin
203
+ /users/{username} GET Users.can_read Admin
204
+ /users/{username} PATCH Users.can_edit Admin
205
+ /users/{username} DELETE Users.can_delete Admin
206
+ /roles GET Roles.can_read Admin
207
+ /roles POST Roles.can_create Admin
208
+ /roles/{role_name} GET Roles.can_read Admin
209
+ /roles/{role_name} PATCH Roles.can_edit Admin
210
+ /roles/{role_name} DELETE Roles.can_delete Admin
211
+ /permissions GET Permission Views.can_read Admin
212
+ ================================================================================== ====== ================================================================= ============
213
+
214
+
215
+ ====================================== ======================================================================= ============
216
+ Website Permissions
217
+ -------------------------------------- ------------------------------------------------------------------------------------
218
+ Action Permissions Minimum Role
219
+ ====================================== ======================================================================= ============
220
+ Access homepage Website.can_read Viewer
221
+ Show Browse menu Browse.menu_access Viewer
222
+ Show DAGs menu DAGs.menu_access Viewer
223
+ Get DAG stats DAGs.can_read, DAG Runs.can_read Viewer
224
+ Show Task Instances menu Task Instances.menu_access Viewer
225
+ Get Task stats DAGs.can_read, DAG Runs.can_read, Task Instances.can_read Viewer
226
+ Get last DAG runs DAGs.can_read, DAG Runs.can_read Viewer
227
+ Get DAG code DAGs.can_read, DAG Code.can_read Viewer
228
+ Get DAG details DAGs.can_read, DAG Runs.can_read Viewer
229
+ Show DAG Dependencies menu DAG Dependencies.menu_access Viewer
230
+ Get DAG Dependencies DAG Dependencies.can_read Viewer
231
+ Get rendered DAG DAGs.can_read, Task Instances.can_read Viewer
232
+ Get Logs with metadata DAGs.can_read, Task Instances.can_read, Task Logs.can_read Viewer
233
+ Get Log DAGs.can_read, Task Instances.can_read, Task Logs.can_read Viewer
234
+ Redirect to external Log DAGs.can_read, Task Instances.can_read, Task Logs.can_read Viewer
235
+ Get Task DAGs.can_read, Task Instances.can_read Viewer
236
+ Show XCom menu XComs.menu_access Op
237
+ Get XCom DAGs.can_read, Task Instances.can_read, XComs.can_read Viewer
238
+ Create XCom XComs.can_create Op
239
+ Delete XCom XComs.can_delete Op
240
+ Triggers Task Instance DAGs.can_edit, Task Instances.can_create User
241
+ Delete DAG DAGs.can_delete User
242
+ Show DAG Runs menu DAG Runs.menu_access Viewer
243
+ Trigger DAG run DAGs.can_edit, DAG Runs.can_create User
244
+ Clear DAG DAGs.can_edit, Task Instances.can_delete User
245
+ Clear DAG Run DAGs.can_edit, Task Instances.can_delete User
246
+ Mark DAG as blocked DAGS.can_edit, DAG Runs.can_read User
247
+ Mark DAG Run as failed DAGS.can_edit, DAG Runs.can_edit User
248
+ Mark DAG Run as success DAGS.can_edit, DAG Runs.can_edit User
249
+ Mark Task as failed DAGs.can_edit, Task Instances.can_edit User
250
+ Mark Task as success DAGs.can_edit, Task Instances.can_edit User
251
+ Get DAG as tree DAGs.can_read, Task Instances.can_read, Viewer
252
+ Task Logs.can_read
253
+ Get DAG as graph DAGs.can_read, Task Instances.can_read, Viewer
254
+ Task Logs.can_read
255
+ Get DAG as duration graph DAGs.can_read, Task Instances.can_read Viewer
256
+ Show all tries DAGs.can_read, Task Instances.can_read Viewer
257
+ Show landing times DAGs.can_read, Task Instances.can_read Viewer
258
+ Toggle DAG paused status DAGs.can_edit User
259
+ Show Gantt Chart DAGs.can_read, Task Instances.can_read Viewer
260
+ Get external links DAGs.can_read, Task Instances.can_read Viewer
261
+ Show Task Instances DAGs.can_read, Task Instances.can_read Viewer
262
+ Show Configurations menu Configurations.menu_access Op
263
+ Show Configs Configurations.can_read Viewer
264
+ Delete multiple records DAGs.can_edit User
265
+ Set Task Instance as running DAGs.can_edit User
266
+ Set Task Instance as failed DAGs.can_edit User
267
+ Set Task Instance as success DAGs.can_edit User
268
+ Set Task Instance as up_for_retry DAGs.can_edit User
269
+ Autocomplete DAGs.can_read Viewer
270
+ Show Asset menu Assets.menu_access Viewer
271
+ Show Assets Assets.can_read Viewer
272
+ Show Docs menu Docs.menu_access Viewer
273
+ Show Documentation menu Documentation.menu_access Viewer
274
+ Show Jobs menu Jobs.menu_access Viewer
275
+ Show Audit Log Audit Logs.menu_access Viewer
276
+ Reset Password My Password.can_read, My Password.can_edit Viewer
277
+ Show Permissions menu Permission Views.menu_access Admin
278
+ List Permissions Permission Views.can_read Admin
279
+ Get My Profile My Profile.can_read Viewer
280
+ Update My Profile My Profile.can_edit Viewer
281
+ List Logs Audit Logs.can_read Viewer
282
+ List Jobs Jobs.can_read Viewer
283
+ Show SLA Misses menu SLA Misses.menu_access Viewer
284
+ List SLA Misses SLA Misses.can_read Viewer
285
+ List Plugins Plugins.can_read Viewer
286
+ Show Plugins menu Plugins.menu_access Viewer
287
+ Show Providers menu Providers.menu_access Op
288
+ List Providers Providers.can_read Op
289
+ List Task Reschedules Task Reschedules.can_read Admin
290
+ Show Triggers menu Triggers.menu_access Admin
291
+ List Triggers Triggers.can_read Admin
292
+ Show Admin menu Admin.menu_access Viewer
293
+ Show Connections menu Connections.menu_access Op
294
+ Show Pools menu Pools.menu_access Viewer
295
+ Show Variables menu Variables.menu_access Op
296
+ Show Roles menu Roles.menu_access Admin
297
+ List Roles Roles.can_read Admin
298
+ Create Roles Roles.can_create Admin
299
+ Update Roles Roles.can_edit Admin
300
+ Delete Roles Roles.can_delete Admin
301
+ Show Users menu Users.menu_access Admin
302
+ Create Users Users.can_create Admin
303
+ Update Users Users.can_edit Admin
304
+ Delete Users Users.can_delete Admin
305
+ Reset user Passwords Passwords.can_edit, Passwords.can_read Admin
306
+ ====================================== ======================================================================= ============
307
+
308
+ These DAG-level controls can be set directly through the UI / CLI, or encoded in the dags themselves through the access_control arg.
309
+
310
+ Order of precedence for DAG-level permissions
311
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
312
+
313
+ Since DAG-level access control can be configured in multiple places, conflicts are inevitable and a clear resolution strategy is required. As a result,
314
+ Airflow considers the ``access_control`` argument supplied on a DAG itself to be completely authoritative if present, which has a few effects:
315
+
316
+ Setting ``access_control`` on a DAG will overwrite any previously existing DAG-level permissions if it is any value other than ``None``:
317
+
318
+ .. code-block:: python
319
+
320
+ DAG(
321
+ dag_id="example_fine_grained_access",
322
+ start_date=pendulum.datetime(2021, 1, 1, tz="UTC"),
323
+ access_control={
324
+ "Viewer": {"can_edit", "can_read", "can_delete"},
325
+ },
326
+ )
327
+
328
+ It's also possible to add DAG Runs resource permissions in a similar way, but explicit adding the resource name to identify which resource the permissions are for:
329
+
330
+ .. code-block:: python
331
+
332
+ DAG(
333
+ dag_id="example_fine_grained_access",
334
+ start_date=pendulum.datetime(2021, 1, 1, tz="UTC"),
335
+ access_control={
336
+ "Viewer": {"DAGs": {"can_edit", "can_read", "can_delete"}, "DAG Runs": {"can_create"}},
337
+ },
338
+ )
339
+
340
+ This also means that setting ``access_control={}`` will wipe any existing DAG-level permissions for a given DAG from the DB:
341
+
342
+ .. code-block:: python
343
+
344
+ DAG(
345
+ dag_id="example_no_fine_grained_access",
346
+ start_date=pendulum.datetime(2021, 1, 1, tz="UTC"),
347
+ access_control={},
348
+ )
349
+
350
+ Conversely, removing the access_control block from a DAG altogether (or setting it to ``None``) won't make any changes and can leave dangling permissions.
351
+
352
+ .. code-block:: python
353
+
354
+ DAG(
355
+ dag_id="example_indifferent_to_fine_grained_access",
356
+ start_date=pendulum.datetime(2021, 1, 1, tz="UTC"),
357
+ )
358
+
359
+ In the case that there is no ``access_control`` defined on the DAG itself, Airflow will defer to existing permissions defined in the DB, which
360
+ may have been set through the UI, CLI or by previous access_control args on the DAG in question.
361
+
362
+ In all cases, system-wide roles such as ``Can edit on DAG`` take precedence over dag-level access controls, such that they can be considered ``Can edit on DAG: *``