.annotation_safe_list.yml
.editorconfig
.gitignore
.pii_annotations.yml
.readthedocs.yaml
CHANGELOG.rst
LICENSE
MANIFEST.in
Makefile
README.rst
catalog-info.yaml
codecov.yml
manage.py
pylintrc
pylintrc_tweaks
pyproject.toml
ruff.toml
tox.ini
uv.lock
.github/PULL_REQUEST_TEMPLATE.md
.github/dependabot.yml
.github/workflows/add-depr-ticket-to-depr-board.yml
.github/workflows/add-remove-label-on-comment.yml
.github/workflows/ci.yml
.github/workflows/commitlint.yml
.github/workflows/release.yml
.github/workflows/self-assign-issue.yml
.github/workflows/upgrade-python-requirements.yml
docs/Makefile
docs/changelog.rst
docs/conf.py
docs/decisions.rst
docs/getting_started.rst
docs/index.rst
docs/internationalization.rst
docs/make.bat
docs/readme.rst
docs/testing.rst
docs/_images/architecture-overview.png
docs/_static/theme_overrides.css
docs/concepts/index.rst
docs/concepts/core_roles_and_permissions/content_library_roles.rst
docs/concepts/core_roles_and_permissions/course_roles.rst
docs/concepts/core_roles_and_permissions/index.rst
docs/decisions/0001-purpose-of-this-repo.rst
docs/decisions/0002-authorization-model-foundation.rst
docs/decisions/0003-jwt-usage.rst
docs/decisions/0004-technology-selection.rst
docs/decisions/0005-architecture-and-data-modeling.rst
docs/decisions/0007-enforcement-mechanisms-mfe.rst
docs/decisions/0008-compatibility-scheme.rst
docs/decisions/0009-authz-for-course-authoring.rst
docs/decisions/0010-course-authoring-flag.rst
docs/decisions/0011-course-authoring-migration-process.rst
docs/decisions/0012-auditability.rst
docs/decisions/0012-glob-support-for-role-assignments.rst
docs/decisions/0013-course-authoring-automatic-migration.rst
docs/decisions/0014-bulk-assignment-queries-without-casbin-enforce.rst
docs/decisions/0015-expose-course-authoring-waffle-flag-state-via-rest-api.rst
docs/decisions/0016-static-and-dynamic-roles.rst
docs/decisions/0017-static-authorization-schema.rst
docs/decisions/0018-authorization-schema-lifecycle.rst
docs/decisions/0019-authorization-schema-discovery.rst
docs/decisions/0020-authorization-schema-internationalization.rst
docs/decisions/0021-authorization-definition-api.rst
docs/decisions/0022-defer-authorization-implications.rst
docs/decisions/0023-extend-static-roles.rst
docs/decisions/0024-api-contract-for-user-grouped-role-assignments.rst
docs/decisions/0025-authorization-schema-source-tracking.rst
docs/decisions/0026-rest-api-domain-ownership-boundary.rst
docs/decisions/0027-cross-domain-filtering-via-openedx-filters.rst
docs/decisions/README.rst
docs/how-tos/index.rst
docs/quickstarts/index.rst
docs/references/authorization-schema-json.rst
docs/references/authorization-schema.rst
docs/references/index.rst
src/openedx_authz/__init__.py
src/openedx_authz/admin.py
src/openedx_authz/apps.py
src/openedx_authz/data.py
src/openedx_authz/handlers.py
src/openedx_authz/urls.py
src/openedx_authz/utils.py
src/openedx_authz.egg-info/PKG-INFO
src/openedx_authz.egg-info/SOURCES.txt
src/openedx_authz.egg-info/dependency_links.txt
src/openedx_authz.egg-info/entry_points.txt
src/openedx_authz.egg-info/requires.txt
src/openedx_authz.egg-info/scm_file_list.json
src/openedx_authz.egg-info/top_level.txt
src/openedx_authz/api/__init__.py
src/openedx_authz/api/data.py
src/openedx_authz/api/permissions.py
src/openedx_authz/api/roles.py
src/openedx_authz/api/users.py
src/openedx_authz/api/utils.py
src/openedx_authz/authz/__init__.py
src/openedx_authz/authz/schema/course_permissions.yaml
src/openedx_authz/authz/schema/course_roles.yaml
src/openedx_authz/authz/schema/library_permissions.yaml
src/openedx_authz/authz/schema/library_roles.yaml
src/openedx_authz/conf/locale/config.yaml
src/openedx_authz/constants/__init__.py
src/openedx_authz/constants/permissions.py
src/openedx_authz/constants/roles.py
src/openedx_authz/engine/__init__.py
src/openedx_authz/engine/adapter.py
src/openedx_authz/engine/apps.py
src/openedx_authz/engine/enforcer.py
src/openedx_authz/engine/filter.py
src/openedx_authz/engine/matcher.py
src/openedx_authz/engine/utils.py
src/openedx_authz/engine/config/authz.policy
src/openedx_authz/engine/config/model.conf
src/openedx_authz/engine/schema/__init__.py
src/openedx_authz/engine/schema/discovery.py
src/openedx_authz/management/__init__.py
src/openedx_authz/management/commands/__init__.py
src/openedx_authz/management/commands/authz_migrate_course_authoring.py
src/openedx_authz/management/commands/authz_rollback_course_authoring.py
src/openedx_authz/management/commands/enforcement.py
src/openedx_authz/management/commands/load_policies.py
src/openedx_authz/migrations/0001_add_casbin_dependency.py
src/openedx_authz/migrations/0002_initial.py
src/openedx_authz/migrations/0003_usersubject.py
src/openedx_authz/migrations/0004_contentlibraryscope.py
src/openedx_authz/migrations/0005_policycachecontrol.py
src/openedx_authz/migrations/0006_migrate_legacy_permissions.py
src/openedx_authz/migrations/0007_coursescope.py
src/openedx_authz/migrations/0008_authzcourseauthoringmigrationrun.py
src/openedx_authz/migrations/0009_roleassignmentaudit.py
src/openedx_authz/migrations/0010_scope_external_key.py
src/openedx_authz/migrations/__init__.py
src/openedx_authz/models/__init__.py
src/openedx_authz/models/authz_migration.py
src/openedx_authz/models/core.py
src/openedx_authz/models/engine.py
src/openedx_authz/models/scopes.py
src/openedx_authz/models/subjects.py
src/openedx_authz/rest_api/__init__.py
src/openedx_authz/rest_api/data.py
src/openedx_authz/rest_api/decorators.py
src/openedx_authz/rest_api/urls.py
src/openedx_authz/rest_api/utils.py
src/openedx_authz/rest_api/v1/__init__.py
src/openedx_authz/rest_api/v1/fields.py
src/openedx_authz/rest_api/v1/filters.py
src/openedx_authz/rest_api/v1/paginators.py
src/openedx_authz/rest_api/v1/permissions.py
src/openedx_authz/rest_api/v1/serializers.py
src/openedx_authz/rest_api/v1/urls.py
src/openedx_authz/rest_api/v1/views.py
src/openedx_authz/schema/__init__.py
src/openedx_authz/schema/authz-schema-v1.json
src/openedx_authz/settings/__init__.py
src/openedx_authz/settings/common.py
src/openedx_authz/settings/production.py
src/openedx_authz/settings/test.py
src/openedx_authz/templates/openedx_authz/base.html
src/openedx_authz/tests/__init__.py
src/openedx_authz/tests/test_commands.py
src/openedx_authz/tests/test_enforcement.py
src/openedx_authz/tests/test_enforcer.py
src/openedx_authz/tests/test_engine_utils.py
src/openedx_authz/tests/test_filter.py
src/openedx_authz/tests/test_handlers.py
src/openedx_authz/tests/test_imports.py
src/openedx_authz/tests/test_migrations.py
src/openedx_authz/tests/test_models.py
src/openedx_authz/tests/test_utils.py
src/openedx_authz/tests/api/__init__.py
src/openedx_authz/tests/api/test_data.py
src/openedx_authz/tests/api/test_roles.py
src/openedx_authz/tests/api/test_users.py
src/openedx_authz/tests/authz/__init__.py
src/openedx_authz/tests/authz/test_resources.py
src/openedx_authz/tests/integration/__init__.py
src/openedx_authz/tests/integration/conftest.py
src/openedx_authz/tests/integration/test_handlers.py
src/openedx_authz/tests/integration/test_models.py
src/openedx_authz/tests/integration/test_views.py
src/openedx_authz/tests/rest_api/__init__.py
src/openedx_authz/tests/rest_api/test_permissions.py
src/openedx_authz/tests/rest_api/test_utils.py
src/openedx_authz/tests/rest_api/test_views.py
src/openedx_authz/tests/schema/__init__.py
src/openedx_authz/tests/schema/test_discovery.py
src/openedx_authz/tests/stubs/__init__.py
src/openedx_authz/tests/stubs/apps.py
src/openedx_authz/tests/stubs/models.py
src/openedx_authz/tests/stubs/migrations/0001_initial.py
src/openedx_authz/tests/stubs/migrations/0002_learningpackage_contentlibrary_learning_package.py
src/openedx_authz/tests/stubs/migrations/0002_userprofile.py
tests/test_models.py