feat(permissions): C-3 — пер-ролевые права кастомных ролей (резолвер + конфиг)

Миграция 056: снят CHECK с role_permissions.role (пересборка) → можно хранить
набор прав произвольной кастомной роли. isEnabled(uid,permRole,baseRole,key):
user override → role_permissions[customRole] → фолбэк role_permissions[base] →
дефолт реестра(base). requirePermission передаёт permRole=customRole||role.
getMyPermissions/getUserPermissions: roleMap = база + наложение кастомной роли.
Тест C-3: права кастомной роли перекрывают базу, фолбэк на базу. custom-roles 8/8,
permissions 17/17, backend без регрессий.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-03 15:11:56 +03:00
parent 7cdb2e2af2
commit 32c2c44b76
4 changed files with 67 additions and 19 deletions
@@ -0,0 +1,19 @@
-- 056_role_permissions_any_role.sql
-- Phase C, Stage C-3 — пер-ролевые права для КАСТОМНЫХ ролей.
-- Снимаем CHECK role IN ('teacher','student','free_student') с role_permissions,
-- чтобы хранить набор прав для произвольной кастомной роли (ключ role = имя роли).
-- SQLite не ALTER-ит CHECK → пересобираем таблицу (она мала, без входящих FK).
CREATE TABLE role_permissions_new (
id INTEGER PRIMARY KEY AUTOINCREMENT,
role TEXT NOT NULL,
permission TEXT NOT NULL,
enabled INTEGER NOT NULL DEFAULT 0,
UNIQUE (role, permission)
);
INSERT INTO role_permissions_new (id, role, permission, enabled)
SELECT id, role, permission, enabled FROM role_permissions;
DROP TABLE role_permissions;
ALTER TABLE role_permissions_new RENAME TO role_permissions;