feat: 管理员跨租户管理 + 注册开关

- 管理员可管理任意用户笔记(读取/修改/删除/回收站/标签/图谱/FTS 全平台)
- 普通用户仍数据隔离, 越权返回404
- 新增注册开关: 管理员后台⚙设置可开/关, 支持REGISTRATION_ENABLED环境变量
- 注册关闭时前台/登录页隐藏注册入口, 注册接口返回400
- 冒烟测试扩展到91用例全过
This commit is contained in:
Your Name
2026-08-11 13:07:56 +08:00
parent d9793300f9
commit 13c53fea0a
12 changed files with 741 additions and 89 deletions
+15 -2
View File
@@ -763,6 +763,7 @@
let currentFilter = { type: 'all' };
let expandedNodes = new Set();
let currentUser = null; // 当前登录用户
let registrationEnabled = true; // 是否开放注册
let authMode = 'login';
async function init() {
@@ -776,9 +777,12 @@
try {
const res = await fetch(`${API}/auth/me`);
const data = await res.json();
currentUser = data.code === 0 && data.data ? data.data : null;
const me = data.data;
currentUser = me && me.id ? me : null;
registrationEnabled = !me || me.registration_enabled !== false;
} catch (e) {
currentUser = null;
registrationEnabled = true;
}
renderUserArea();
}
@@ -792,14 +796,23 @@
<button class="auth-link" onclick="logout()">退出</button>
`;
} else {
const regBtn = registrationEnabled
? `<button class="auth-link" onclick="openAuth('register')">注册</button>`
: '';
area.innerHTML = `
<button class="auth-link" onclick="openAuth('login')">登录</button>
<button class="auth-link" onclick="openAuth('register')">注册</button>
${regBtn}
`;
}
// 同步登录弹窗:注册开关关闭时隐藏「去注册」
const switchEl = document.getElementById('authSwitch');
if (switchEl) {
switchEl.style.display = registrationEnabled ? '' : 'none';
}
}
function openAuth(mode) {
if (mode === 'register' && !registrationEnabled) mode = 'login';
authMode = mode;
document.getElementById('authTitle').textContent = mode === 'login' ? '登录' : '注册';
document.getElementById('authDisplayGroup').style.display = mode === 'login' ? 'none' : 'block';