diff --git a/Release/database/XNSim.db b/Release/database/XNSim.db
index bc63510..8e84bde 100644
Binary files a/Release/database/XNSim.db and b/Release/database/XNSim.db differ
diff --git a/XNSimHtml/components/main-toolbar.js b/XNSimHtml/components/main-toolbar.js
index 01b74fc..9f0e2e0 100644
--- a/XNSimHtml/components/main-toolbar.js
+++ b/XNSimHtml/components/main-toolbar.js
@@ -4,10 +4,15 @@ class MainToolbar extends HTMLElement {
this.attachShadow({ mode: 'open' });
}
- connectedCallback() {
+ async connectedCallback() {
this.render();
this.addEventListeners();
- this.checkUserAccessLevel();
+ await this.checkUserAccessLevel();
+
+ // 监听登录成功事件
+ document.addEventListener('login-success', async () => {
+ await this.checkUserAccessLevel();
+ });
}
render() {
@@ -57,7 +62,7 @@ class MainToolbar extends HTMLElement {
}
.tool-item.hidden {
- display: none;
+ display: none !important;
}
.icon {
@@ -130,31 +135,30 @@ class MainToolbar extends HTMLElement {
});
}
- checkUserAccessLevel() {
- // 获取用户信息
- let userInfo;
+ async checkUserAccessLevel() {
try {
- const userInfoStr = localStorage.getItem('userInfo');
- if (!userInfoStr) {
- return;
- }
- userInfo = JSON.parse(userInfoStr);
+ const response = await fetch('/api/check-auth', {
+ credentials: 'include'
+ });
+ const result = await response.json();
- // 获取用户访问级别
- const accessLevel = parseInt(userInfo.access_level);
-
- // 根据用户访问级别控制开发选项的可见性
- const developOption = this.shadowRoot.getElementById('developOption');
- if (developOption) {
- // 只有等级大于等于2的用户才可见
- if (accessLevel < 2) {
- developOption.classList.add('hidden');
- } else {
- developOption.classList.remove('hidden');
+ if (result.success) {
+ // 获取用户访问级别
+ const accessLevel = parseInt(result.user.access_level);
+
+ // 根据用户访问级别控制开发选项的可见性
+ const developOption = this.shadowRoot.getElementById('developOption');
+ if (developOption) {
+ // 只有等级大于等于2的用户才可见
+ if (accessLevel < 2) {
+ developOption.classList.add('hidden');
+ } else {
+ developOption.classList.remove('hidden');
+ }
}
}
} catch (error) {
- console.error('处理用户信息失败:', error);
+ console.error('获取用户权限失败:', error);
}
}
}
diff --git a/XNSimHtml/components/sub-toolbar.js b/XNSimHtml/components/sub-toolbar.js
index 48a2f72..bbe6be9 100644
--- a/XNSimHtml/components/sub-toolbar.js
+++ b/XNSimHtml/components/sub-toolbar.js
@@ -17,9 +17,60 @@ class SubToolbar extends HTMLElement {
}
}
- connectedCallback() {
+ async connectedCallback() {
this.render();
this.addEventListeners();
+ await this.checkUserAccess();
+
+ // 监听登录成功事件
+ document.addEventListener('login-success', async () => {
+ await this.checkUserAccess();
+ });
+ }
+
+ // 检查用户权限
+ async checkUserAccess() {
+ try {
+ const response = await fetch('/api/check-auth', {
+ credentials: 'include'
+ });
+ const result = await response.json();
+
+ if (result.success) {
+ const accessLevel = parseInt(result.user.access_level);
+ // 控制管理员选项的显示
+ const adminItems = this.shadowRoot.querySelectorAll('.admin-only');
+ adminItems.forEach(item => {
+ item.style.display = accessLevel >= 3 ? 'flex' : 'none';
+ });
+ // 控制待办事项选项的显示
+ const guestItems = this.shadowRoot.querySelectorAll('.guest-hidden');
+ guestItems.forEach(item => {
+ item.style.display = accessLevel > 0 ? 'flex' : 'none';
+ });
+ } else {
+ // 未登录或验证失败时隐藏管理员选项和待办事项
+ const adminItems = this.shadowRoot.querySelectorAll('.admin-only');
+ adminItems.forEach(item => {
+ item.style.display = 'none';
+ });
+ const guestItems = this.shadowRoot.querySelectorAll('.guest-hidden');
+ guestItems.forEach(item => {
+ item.style.display = 'none';
+ });
+ }
+ } catch (error) {
+ console.error('获取用户权限失败:', error);
+ // 发生错误时隐藏管理员选项和待办事项
+ const adminItems = this.shadowRoot.querySelectorAll('.admin-only');
+ adminItems.forEach(item => {
+ item.style.display = 'none';
+ });
+ const guestItems = this.shadowRoot.querySelectorAll('.guest-hidden');
+ guestItems.forEach(item => {
+ item.style.display = 'none';
+ });
+ }
}
render() {
@@ -154,7 +205,7 @@ class SubToolbar extends HTMLElement {
更新记录
-