feat(permissions): B6 — массовая выдача права классу (личный оверрайд всем ученикам)

POST /api/permissions/class/:id/bulk { permission, enabled } (admin, явный
requireRole) — выставляет user_permissions всем ученикам класса (1/0/null=сброс),
точечный token_version bump каждому. Валидация: только студенческие ключи.
Клиент LS.setClassPermission. В админке «Доступ · роли» — блок «Массово по
классу»: выбор класса → у каждого права «включить/выключить всем / сбросить».
Тест: оверрайд всем + сброс + отклонение teacher-ключа. Backend 221 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-03 14:27:58 +03:00
parent 0b0c113181
commit b95b639e75
6 changed files with 118 additions and 3 deletions
+4 -1
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 } = require('../controllers/permissionsController');
const { getPermissions, setPermission, getMyPermissions, getUserPermissions, setUserPermission, resetUserPermissions, getPermissionLog, setClassPermission } = require('../controllers/permissionsController');
router.use(authMiddleware);
@@ -13,6 +13,9 @@ router.get('/', getPermissions);
router.get('/log', getPermissionLog);
router.post('/', setPermission);
/* ── Массово по классу (личные оверрайды всем ученикам класса) ── */
router.post('/class/:id/bulk', requireRole('admin'), setClassPermission);
/* ── Per-user overrides ── */
router.get('/users/:id', getUserPermissions);
router.post('/users/:id', setUserPermission);