Juan Denis and Claude Opus 5
107fdbdfde
refactor(auth): remove the last inline role checks
...
Plan 76 milestone A, the third row. 23 handlers decided admin access inline,
all in two files, in two shapes.
18 were the mid-route gate this milestone already built a door for:
current_user_id = get_jwt_identity()
user = User.query.get(current_user_id)
if user.role != 'admin':
return jsonify({'error': 'Admin access required'}), 403
which is four lines to say require_admin_user(), and carried the two-line
identity lookup with it. Migrating them closes both rows at once: the identity
census drops 87 -> 69 and the controller-boundary baseline loses 18 persistence
crossings (528 -> 510), with no new entries.
It also fixes a latent 500: where the check omitted the `not user or` guard, a
token naming a deleted user hit `None.role` instead of answering 403.
The other 5 are `not user.is_admin and app.user_id != user.id` — admin OR
owner, which is a different question. Those keep their shape and only converge
the truth source from `role != 'admin'` to `is_admin`; routing them through
can_access_app would silently widen access, since that also honours resource
grants.
The migration initially left `current_user_id` referenced but unbound in four
places. Two were caught by tests; the other two (create_manual_app,
upload_app_archive) have no coverage and were caught by an AST scan for names
used-but-never-assigned. Worth remembering that a mechanical removal needs the
scan, not just the suite.
Gate: -k "system or apps or app_ or host_snapshot or manual_app or upload",
304 passed / 13 skipped; all seven ratchets green (52 passed).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-08-18 22:06:35 -04:00
..
2026-07-07 20:29:31 -04:00
2026-08-18 22:06:35 -04:00
2026-08-18 03:11:37 -04:00
2026-08-18 16:38:25 -04:00
2026-07-09 05:27:22 -04:00
2026-08-18 11:24:20 -04:00
2026-08-18 22:06:35 -04:00
2026-08-18 19:33:57 -04:00
2026-08-18 11:24:20 -04:00
2026-08-18 16:38:25 -04:00
2026-08-18 12:05:17 -04:00
2026-08-18 20:48:33 -04:00
2026-08-18 20:48:33 -04:00
2026-08-18 11:24:20 -04:00
2026-08-12 18:15:53 -04:00
2026-08-06 02:59:14 -04:00
2026-08-16 05:27:08 -04:00
2026-06-12 17:31:26 -04:00
2026-05-31 14:46:47 -04:00
2026-05-31 16:08:13 -04:00
2026-06-12 17:33:29 -04:00
2026-06-01 02:39:05 -04:00
2026-07-25 14:15:29 -04:00
2026-08-05 02:38:41 -04:00
2026-08-18 02:47:57 -04:00
2026-08-18 03:11:37 -04:00
2026-08-18 02:42:25 -04:00
2026-08-18 19:33:57 -04:00
2026-08-06 02:59:14 -04:00
2026-08-04 08:53:27 -04:00
2026-07-21 22:57:33 -04:00
2026-08-18 11:24:20 -04:00
2026-08-12 20:26:04 -04:00
2026-08-05 02:38:41 -04:00
2026-08-09 13:53:59 -04:00
2026-08-18 02:42:39 -04:00
2026-08-05 02:38:41 -04:00
2026-07-02 22:36:34 -04:00
2026-07-07 20:29:25 -04:00
2026-06-19 13:22:43 -04:00
2026-06-24 14:19:32 -04:00
2026-07-07 20:29:25 -04:00
2026-07-09 04:41:00 -04:00
2026-08-17 21:03:06 -04:00
2026-08-05 13:36:33 -04:00
2026-07-09 04:41:00 -04:00
2026-07-07 20:29:25 -04:00
2026-07-09 04:41:00 -04:00
2026-06-24 14:27:08 -04:00
2026-06-24 14:20:43 -04:00
2026-07-09 04:41:00 -04:00
2026-08-05 13:36:33 -04:00
2026-08-05 13:36:33 -04:00
2026-08-17 21:15:45 -04:00
2026-07-07 20:29:25 -04:00
2026-08-06 02:59:14 -04:00
2026-07-25 12:38:56 -04:00
2026-06-23 18:49:04 -04:00
2026-08-17 20:07:26 -04:00
2026-07-25 15:48:36 -04:00
2026-07-03 15:21:22 -04:00
2026-07-11 01:22:49 -04:00
2026-07-04 01:46:34 -04:00
2026-08-06 02:59:14 -04:00
2026-07-02 01:04:03 -04:00
2026-07-09 05:02:54 -04:00
2026-07-02 01:04:03 -04:00
2026-07-21 22:57:33 -04:00
2026-07-25 16:19:33 -04:00
2026-06-24 14:24:13 -04:00
2026-06-23 21:15:16 -04:00
2026-08-18 11:26:40 -04:00
2026-05-05 14:03:31 -04:00
2026-08-18 11:24:20 -04:00
2026-06-19 10:13:50 -04:00
2026-06-19 09:54:40 -04:00
2026-08-12 18:15:53 -04:00
2026-06-23 18:23:47 -04:00
2026-08-18 02:51:33 -04:00
2026-07-09 04:41:00 -04:00
2026-07-07 20:29:24 -04:00
2026-07-27 22:44:40 -04:00
2026-07-25 21:23:14 -04:00
2026-07-26 00:19:46 -04:00
2026-08-12 20:26:04 -04:00
2026-08-18 16:38:25 -04:00
2026-08-06 02:59:14 -04:00
2026-07-03 14:24:03 -04:00
2026-06-15 00:01:41 -04:00
2026-08-18 11:26:40 -04:00
2026-07-22 17:31:18 -04:00
2026-06-19 03:12:07 -04:00
2026-07-23 16:58:46 -04:00
2026-07-03 14:23:50 -04:00
2026-07-25 20:04:39 -04:00
2026-08-13 17:33:35 -04:00
2026-08-04 08:53:27 -04:00
2026-06-24 14:52:04 -04:00
2026-08-13 16:17:23 -04:00
2026-08-13 16:45:38 -04:00
2026-06-22 16:34:17 -04:00
2026-06-22 16:12:31 -04:00
2026-06-22 16:12:31 -04:00
2026-07-08 01:41:22 -04:00
2026-07-09 04:50:16 -04:00
2026-07-08 01:41:22 -04:00
2026-06-30 23:31:57 -04:00
2026-06-22 16:24:53 -04:00
2026-06-23 00:34:55 -04:00
2026-07-03 23:18:08 -04:00
2026-06-22 16:40:35 -04:00
2026-07-25 22:01:15 -04:00
2026-08-18 13:45:25 -04:00
2026-08-18 13:45:25 -04:00
2026-08-13 17:26:14 -04:00
2026-08-17 22:48:10 -04:00
2026-06-19 01:34:02 -04:00
2026-07-04 01:28:16 -04:00
2026-08-12 09:05:56 -04:00
2026-08-06 02:59:14 -04:00
2026-06-23 21:33:53 -04:00
2026-07-09 04:55:53 -04:00
2026-08-18 01:56:59 -04:00
2026-08-06 02:59:14 -04:00
2026-06-24 14:32:41 -04:00
2026-06-24 14:36:08 -04:00
2026-06-23 20:04:04 -04:00
2026-08-18 03:33:22 -04:00
2026-08-18 02:56:33 -04:00
2026-07-08 23:12:48 -04:00
2026-08-06 02:59:14 -04:00
2026-08-13 17:48:36 -04:00
2026-08-13 17:44:11 -04:00
2026-08-06 02:59:14 -04:00
2026-08-06 02:59:14 -04:00
2026-08-13 23:07:10 -04:00
2026-08-18 11:26:23 -04:00
2026-07-03 15:21:34 -04:00
2026-08-02 18:56:33 -04:00
2026-08-13 16:03:25 -04:00
2026-08-17 23:50:10 -04:00
2026-08-17 10:40:03 -04:00
2026-08-17 19:28:24 -04:00
2026-08-17 10:19:45 -04:00
2026-08-06 03:01:24 -04:00
2026-08-13 17:27:59 -04:00
2026-07-09 04:41:00 -04:00
2026-07-08 01:41:13 -04:00
2026-06-23 21:15:16 -04:00
2026-07-08 01:41:13 -04:00
2026-07-09 04:41:00 -04:00
2026-08-06 02:59:14 -04:00
2026-08-03 23:44:56 -04:00
2026-08-11 19:43:46 -04:00
2026-07-07 20:29:24 -04:00
2026-07-10 23:06:09 -04:00
2026-07-07 20:29:31 -04:00
2026-08-17 09:31:18 -04:00
2026-08-06 02:59:14 -04:00
2026-07-22 19:22:43 -04:00
2026-08-18 19:33:57 -04:00
2026-06-19 09:37:30 -04:00
2026-06-23 20:57:40 -04:00
2026-07-25 16:51:44 -04:00
2026-08-18 03:11:37 -04:00
2026-08-13 17:27:59 -04:00
2026-08-17 21:43:59 -04:00
2026-07-22 00:48:13 -04:00
2026-07-18 00:59:19 -04:00
2026-07-03 14:23:50 -04:00
2026-07-03 15:21:23 -04:00
2026-07-01 20:49:41 -04:00
2026-08-06 02:59:14 -04:00
2026-07-09 03:35:53 -04:00
2026-07-09 02:57:23 -04:00
2026-07-09 03:05:08 -04:00
2026-07-10 01:13:14 -04:00
2026-07-04 01:39:53 -04:00
2026-07-09 03:21:14 -04:00
2026-07-09 03:28:08 -04:00
2026-07-04 01:16:29 -04:00
2026-07-04 01:46:34 -04:00
2026-07-09 03:35:53 -04:00
2026-07-04 01:34:54 -04:00
2026-07-10 01:13:14 -04:00
2026-07-04 01:39:53 -04:00
2026-07-09 03:13:54 -04:00
2026-07-08 01:41:43 -04:00
2026-08-18 11:24:20 -04:00
2026-08-18 11:26:23 -04:00
2026-07-25 20:35:19 -04:00
2026-07-02 00:15:10 -04:00
2026-08-17 20:07:39 -04:00
2026-08-17 23:03:39 -04:00
2026-06-15 23:20:00 -04:00
2026-08-18 11:26:23 -04:00
2026-07-07 20:29:31 -04:00
2026-06-21 19:57:02 -04:00
2026-08-13 14:36:24 -04:00
2026-07-07 20:29:29 -04:00
2026-07-08 01:41:43 -04:00
2026-07-09 04:41:00 -04:00
2026-07-14 22:34:24 -04:00
2026-07-09 04:41:00 -04:00
2026-08-05 02:38:41 -04:00
2026-06-12 18:35:43 -04:00
2026-05-31 16:08:32 -04:00
2026-07-02 22:19:14 -04:00
2026-07-08 01:41:43 -04:00
2026-07-25 14:02:08 -04:00
2026-08-05 01:18:32 -04:00
2026-07-25 12:46:59 -04:00
2026-07-25 13:56:09 -04:00
2026-08-05 13:36:20 -04:00
2026-07-25 13:40:00 -04:00
2026-08-06 02:59:14 -04:00
2026-08-13 14:57:51 -04:00
2026-08-17 22:58:18 -04:00
2026-06-23 19:33:44 -04:00
2026-08-18 00:17:06 -04:00
2026-08-17 22:48:10 -04:00
2026-08-17 22:48:10 -04:00
2026-08-17 22:40:12 -04:00
2026-08-17 22:48:27 -04:00
2026-06-23 19:33:44 -04:00
2026-07-14 22:22:18 -04:00
2026-06-23 19:33:44 -04:00
2026-08-18 02:51:16 -04:00
2026-06-20 22:25:06 -04:00
2026-06-20 22:38:38 -04:00
2026-08-04 08:53:27 -04:00
2026-08-18 12:05:17 -04:00
2026-08-12 13:08:49 -04:00
2026-08-16 15:54:08 -04:00
2026-08-05 13:36:20 -04:00
2026-08-06 02:59:14 -04:00
2026-08-18 03:05:32 -04:00
2026-07-07 20:29:29 -04:00
2026-05-03 07:07:57 -04:00
2026-08-05 02:38:41 -04:00
2026-07-22 16:36:58 -04:00
2026-07-22 17:24:36 -04:00
2026-08-17 21:23:00 -04:00
2026-07-22 17:24:36 -04:00
2026-08-18 02:47:57 -04:00
2026-08-04 08:53:27 -04:00
2026-06-21 01:54:51 -04:00
2026-08-02 18:35:25 -04:00
2026-06-19 16:52:40 -04:00
2026-07-08 01:41:43 -04:00
2026-08-18 03:00:22 -04:00
2026-07-31 14:56:37 -04:00
2026-06-23 20:04:04 -04:00
2026-07-07 20:29:24 -04:00
2026-07-01 22:55:11 -04:00
2026-08-06 02:59:14 -04:00
2026-06-25 01:06:44 -04:00
2026-05-05 14:03:31 -04:00
2026-08-12 05:52:37 -04:00
2026-06-23 17:31:28 -04:00
2026-06-24 14:06:05 -04:00
2026-08-13 16:33:47 -04:00
2026-07-07 20:29:23 -04:00
2026-07-07 20:29:23 -04:00
2026-08-05 02:38:41 -04:00
2026-07-09 04:41:00 -04:00
2026-08-04 08:53:27 -04:00
2026-08-06 02:59:14 -04:00
2026-07-01 00:31:22 -04:00
2026-08-06 02:59:14 -04:00
2026-07-03 14:24:29 -04:00
2026-08-05 02:38:41 -04:00
2026-08-17 20:07:39 -04:00
2026-06-30 23:48:28 -04:00
2026-08-12 09:27:05 -04:00
2026-08-18 11:24:20 -04:00
2026-07-08 23:58:45 -04:00
2026-07-09 04:41:00 -04:00
2026-08-13 16:22:33 -04:00
2026-08-13 15:59:47 -04:00
2026-06-24 14:40:08 -04:00
2026-08-06 02:59:14 -04:00
2026-08-18 20:48:33 -04:00
2026-08-18 11:24:20 -04:00
2026-08-06 02:59:14 -04:00
2026-07-09 04:41:00 -04:00
2026-07-09 04:41:00 -04:00
2026-07-07 20:29:24 -04:00
2026-06-22 01:45:15 -04:00
2026-07-25 20:09:05 -04:00
2026-07-21 23:26:13 -04:00
2026-06-23 18:23:47 -04:00
2026-08-06 09:32:40 -04:00
2026-08-18 00:45:15 -04:00
2026-08-06 00:33:46 -04:00
2026-07-23 09:25:01 -04:00
2026-07-23 09:25:01 -04:00
2026-08-18 03:00:22 -04:00
2026-07-20 01:16:16 -04:00
2026-08-06 02:59:14 -04:00
2026-08-18 20:38:20 -04:00
2026-08-18 02:56:33 -04:00
2026-08-18 20:38:20 -04:00
2026-08-05 02:38:41 -04:00
2026-02-10 16:03:19 -05:00
2026-08-18 16:38:25 -04:00
2026-08-09 02:32:55 -04:00
2026-06-19 14:02:24 -04:00
2026-08-05 02:38:41 -04:00
2026-07-09 04:41:00 -04:00
2026-08-12 21:48:21 -04:00
2026-07-03 15:21:23 -04:00
2026-08-18 20:38:20 -04:00
2026-08-18 20:38:20 -04:00