+
${esc(p.label)}
${badge}
+ ${expBadge}
+ ${tempBtn}
${resetBtn}
${esc(p.desc)}
@@ -408,6 +416,21 @@
}
}
+ async function doSetUserPermTemp(key) {
+ const uid = getActiveUid();
+ if (!uid) return;
+ const raw = window.prompt('Выдать право временно. На сколько дней?', '7');
+ if (raw === null) return;
+ const days = parseInt(raw, 10);
+ if (!Number.isInteger(days) || days <= 0) { LS.toast('Введите число дней > 0', 'error'); return; }
+ try {
+ await LS.setUserPermission(uid, key, true, days);
+ _upPermsData = await LS.getUserPermissions(uid);
+ renderUserPerms();
+ LS.toast(`Право выдано на ${days} дн.`, 'success');
+ } catch (e) { LS.toast('Ошибка: ' + e.message, 'error'); }
+ }
+
async function doResetOneUserPerm(key) {
const uid = getActiveUid();
if (!uid) return;
@@ -445,6 +468,7 @@
window.closeUserPermsModal = closeUserPermsModal;
window.openUserPermsModal = openUserPermsModal;
window.doSetUserPerm = doSetUserPerm;
+ window.doSetUserPermTemp = doSetUserPermTemp;
window.doResetOneUserPerm = doResetOneUserPerm;
window.doResetAllUserPerms = doResetAllUserPerms;
// Phase 5 quick actions
diff --git a/js/api.js b/js/api.js
index cfd1787..a9c5b7c 100644
--- a/js/api.js
+++ b/js/api.js
@@ -1301,7 +1301,7 @@ async function permissionsPresets() { return req('GET',
async function applyClassPreset(classId, preset) { return req('POST', `/permissions/class/${classId}/preset`, { preset }); }
async function setPermission(role, permission, enabled) { return req('POST', '/permissions', { role, permission, enabled }); }
async function getUserPermissions(uid) { return req('GET', `/permissions/users/${uid}`); }
-async function setUserPermission(uid, permission, enabled) { return req('POST', `/permissions/users/${uid}`, { permission, enabled }); }
+async function setUserPermission(uid, permission, enabled, days) { return req('POST', `/permissions/users/${uid}`, days ? { permission, enabled, days } : { permission, enabled }); }
async function resetUserPermissions(uid, permission) { return req('DELETE', `/permissions/users/${uid}/reset`, permission ? { permission } : undefined); }
/* ── content access (учебники / экзамены: открыть-закрыть классам/ученикам) ── */