Spaces:
Running
Running
| from __future__ import annotations | |
| import unittest | |
| from app.security.context import AuthContext | |
| from app.security.errors import ForbiddenError | |
| from app.security.service import APIKeyService | |
| class SecurityRoleEnforcementTests(unittest.TestCase): | |
| def test_viewer_scope_is_enforced_by_authoritative_membership_role(self) -> None: | |
| context = AuthContext( | |
| api_key_id="key", | |
| key_name="Viewer Key", | |
| key_prefix="mp_test_viewer", | |
| environment="test", | |
| role="viewer", | |
| scopes=frozenset({"projects:read", "projects:write", "jobs:create"}), | |
| requests_per_minute=60, | |
| concurrent_jobs=1, | |
| uploads_per_hour=1, | |
| processing_bytes_per_day=1024, | |
| ) | |
| APIKeyService.authorize(context, "projects:read") | |
| APIKeyService.authorize(context, "jobs:read") | |
| with self.assertRaises(ForbiddenError): | |
| APIKeyService.authorize(context, "projects:write") | |
| with self.assertRaises(ForbiddenError): | |
| APIKeyService.authorize(context, "jobs:create") | |
| def test_explicit_scopes_still_bypass_role_when_authorized(self) -> None: | |
| context = AuthContext( | |
| api_key_id="key", | |
| key_name="Developer Key", | |
| key_prefix="mp_test_dev", | |
| environment="test", | |
| role="developer", | |
| scopes=frozenset({"projects:write", "jobs:create"}), | |
| requests_per_minute=60, | |
| concurrent_jobs=1, | |
| uploads_per_hour=1, | |
| processing_bytes_per_day=1024, | |
| ) | |
| APIKeyService.authorize(context, "projects:write") | |
| APIKeyService.authorize(context, "jobs:create") | |
| if __name__ == "__main__": | |
| unittest.main() | |