Dries Peeters
568933c3b9
fix(auth): scope client portal users to their assigned client
...
Client-portal-enabled users (main app login, typically viewer) were not
included in get_allowed_client_ids(), so ProjectService and other callers
saw scope_client_ids=None and listed every project.
- Return [client_id] for is_client_portal_user in User.get_allowed_client_ids
- Derive get_allowed_project_ids from allowed client IDs for all non-admins
- Apply client/project scope and access checks from allowed IDs, not only
subcontractor is_scope_restricted (fixes user_can_access_* for portal)
Fixes DRYTRIX/TimeTracker#592 .
Tests: extend test_scope_filter with client_portal_scoped_user and API
isolation for GET /api/v1/projects.
2026-04-24 16:15:24 +02:00
..
2026-04-15 12:15:23 +02:00
2026-03-15 10:51:52 +01:00
2026-04-05 08:39:11 +02:00
2026-03-15 10:51:52 +01:00
2026-03-16 15:15:21 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-16 15:15:21 +01:00
2026-03-15 10:51:52 +01:00
2026-04-15 12:57:01 +02:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-04-15 10:55:37 +02:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-26 14:51:55 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-16 15:15:21 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-27 06:38:47 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-04-12 13:34:58 +02:00
2026-03-15 10:51:52 +01:00
2026-04-12 14:00:12 +02:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-04-05 08:39:18 +02:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-26 14:52:06 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-04-05 08:39:11 +02:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-06 15:44:35 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-04-15 12:15:23 +02:00
2026-04-24 16:15:24 +02:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00
2026-03-15 10:51:52 +01:00