feat(permissions): B7 — пресеты-профили прав (применение к классу одним кликом)

PRESETS (student): «Полный доступ», «Режим фокуса» (без магазина/испытаний),
«Ограниченный» (+ без лаборатории), «Сбросить к стандарту роли». GET
/api/permissions/presets + POST /api/permissions/class/:id/preset (admin).
Рефактор: общий applyPermsToClass() (карта key→1/0/inherit) — его используют и
bulk, и preset. В блоке «Массово по классу» — кнопки пресетов (с подтверждением).
Тест: список + применение focus/reset + валидация. Backend pass (3 baseline-Auth).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-03 14:33:25 +03:00
parent b95b639e75
commit 8b495f1508
5 changed files with 110 additions and 21 deletions
+4 -2
View File
@@ -1,6 +1,6 @@
const router = require('express').Router();
const { authMiddleware, requireRole } = require('../middleware/auth');
const { getPermissions, setPermission, getMyPermissions, getUserPermissions, setUserPermission, resetUserPermissions, getPermissionLog, setClassPermission } = require('../controllers/permissionsController');
const { getPermissions, setPermission, getMyPermissions, getUserPermissions, setUserPermission, resetUserPermissions, getPermissionLog, setClassPermission, getPresets, applyClassPreset } = require('../controllers/permissionsController');
router.use(authMiddleware);
@@ -13,8 +13,10 @@ router.get('/', getPermissions);
router.get('/log', getPermissionLog);
router.post('/', setPermission);
/* ── Массово по классу (личные оверрайды всем ученикам класса) ── */
/* ── Пресеты-профили + массово по классу (личные оверрайды ученикам класса) ── */
router.get('/presets', requireRole('admin'), getPresets);
router.post('/class/:id/bulk', requireRole('admin'), setClassPermission);
router.post('/class/:id/preset', requireRole('admin'), applyClassPreset);
/* ── Per-user overrides ── */
router.get('/users/:id', getUserPermissions);