Files
webui4frpc/web/public/favicon.svg
jianf f29ec81e4a feat: session-cookie login/logout + three-tier roles (superadmin/admin/viewer) with read-only UI + remove pink theme
- cookie-based auth (/login /logout) replacing Basic Auth for UI, enabling logout
- roles: superadmin (account management only), admin (full except accounts), viewer/audit (read-only status+cluster, export logs)
- readonly accounts hide edit buttons (added remote node, group ops, canvas layout/save/import, cluster manage, install) instead of greying them
- auditors see status+cluster only; ordinary admins lose the accounts nav; last-admin guard covers superadmin
- remove pink theme entirely (switcher, [data-theme=pink], leftover localStorage), keep white/blue
2026-08-20 09:08:15 +08:00

282 lines
10 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 500" width="500" height="500" shape-rendering="crispEdges">
<defs>
<rect id="p" width="14" height="14" fill="#000000" />
<rect id="q" width="7" height="7" fill="#2563eb" />
<rect id="d" width="8" height="8" fill="#94a3b8" />
<rect id="s" width="6" height="6" fill="#94a3b8" />
</defs>
<!-- 圆角白色背景 -->
<rect width="500" height="500" rx="40" fill="#ffffff" stroke="#e2e8f0" stroke-width="4" />
<!-- ========== 主字母 WUI ========== -->
<g transform="translate(70, 100)">
<!-- W -->
<g transform="translate(0, 0)">
<use href="#p" x="0" y="0" />
<use href="#p" x="14" y="0" />
<use href="#p" x="0" y="14" />
<use href="#p" x="14" y="14" />
<use href="#p" x="0" y="28" />
<use href="#p" x="14" y="28" />
<use href="#p" x="0" y="42" />
<use href="#p" x="14" y="42" />
<use href="#p" x="0" y="56" />
<use href="#p" x="14" y="56" />
<use href="#p" x="0" y="70" />
<use href="#p" x="14" y="70" />
<use href="#p" x="0" y="84" />
<use href="#p" x="14" y="84" />
<use href="#p" x="0" y="98" />
<use href="#p" x="14" y="98" />
<use href="#p" x="0" y="112" />
<use href="#p" x="14" y="112" />
<use href="#p" x="0" y="126" />
<use href="#p" x="14" y="126" />
<use href="#p" x="0" y="140" />
<use href="#p" x="14" y="140" />
<use href="#p" x="0" y="154" />
<use href="#p" x="14" y="154" />
<use href="#p" x="0" y="168" />
<use href="#p" x="14" y="168" />
<use href="#p" x="98" y="0" />
<use href="#p" x="112" y="0" />
<use href="#p" x="98" y="14" />
<use href="#p" x="112" y="14" />
<use href="#p" x="98" y="28" />
<use href="#p" x="112" y="28" />
<use href="#p" x="98" y="42" />
<use href="#p" x="112" y="42" />
<use href="#p" x="98" y="56" />
<use href="#p" x="112" y="56" />
<use href="#p" x="98" y="70" />
<use href="#p" x="112" y="70" />
<use href="#p" x="98" y="84" />
<use href="#p" x="112" y="84" />
<use href="#p" x="98" y="98" />
<use href="#p" x="112" y="98" />
<use href="#p" x="98" y="112" />
<use href="#p" x="112" y="112" />
<use href="#p" x="98" y="126" />
<use href="#p" x="112" y="126" />
<use href="#p" x="98" y="140" />
<use href="#p" x="112" y="140" />
<use href="#p" x="98" y="154" />
<use href="#p" x="112" y="154" />
<use href="#p" x="98" y="168" />
<use href="#p" x="112" y="168" />
<use href="#p" x="28" y="70" />
<use href="#p" x="56" y="70" />
<use href="#p" x="84" y="70" />
<use href="#p" x="28" y="84" />
<use href="#p" x="56" y="84" />
<use href="#p" x="84" y="84" />
<use href="#p" x="28" y="98" />
<use href="#p" x="56" y="98" />
<use href="#p" x="84" y="98" />
<use href="#p" x="28" y="112" />
<use href="#p" x="56" y="112" />
<use href="#p" x="84" y="112" />
<use href="#p" x="42" y="126" />
<use href="#p" x="70" y="126" />
<use href="#p" x="42" y="140" />
<use href="#p" x="70" y="140" />
<use href="#p" x="42" y="154" />
<use href="#p" x="70" y="154" />
<use href="#p" x="56" y="154" />
<use href="#p" x="56" y="168" />
</g>
<!-- U -->
<g transform="translate(144, 0)">
<use href="#p" x="0" y="0" />
<use href="#p" x="14" y="0" />
<use href="#p" x="0" y="14" />
<use href="#p" x="14" y="14" />
<use href="#p" x="0" y="28" />
<use href="#p" x="14" y="28" />
<use href="#p" x="0" y="42" />
<use href="#p" x="14" y="42" />
<use href="#p" x="0" y="56" />
<use href="#p" x="14" y="56" />
<use href="#p" x="0" y="70" />
<use href="#p" x="14" y="70" />
<use href="#p" x="0" y="84" />
<use href="#p" x="14" y="84" />
<use href="#p" x="0" y="98" />
<use href="#p" x="14" y="98" />
<use href="#p" x="0" y="112" />
<use href="#p" x="14" y="112" />
<use href="#p" x="0" y="126" />
<use href="#p" x="14" y="126" />
<use href="#p" x="0" y="140" />
<use href="#p" x="14" y="140" />
<use href="#p" x="0" y="154" />
<use href="#p" x="14" y="154" />
<use href="#p" x="0" y="168" />
<use href="#p" x="14" y="168" />
<use href="#p" x="98" y="0" />
<use href="#p" x="112" y="0" />
<use href="#p" x="98" y="14" />
<use href="#p" x="112" y="14" />
<use href="#p" x="98" y="28" />
<use href="#p" x="112" y="28" />
<use href="#p" x="98" y="42" />
<use href="#p" x="112" y="42" />
<use href="#p" x="98" y="56" />
<use href="#p" x="112" y="56" />
<use href="#p" x="98" y="70" />
<use href="#p" x="112" y="70" />
<use href="#p" x="98" y="84" />
<use href="#p" x="112" y="84" />
<use href="#p" x="98" y="98" />
<use href="#p" x="112" y="98" />
<use href="#p" x="98" y="112" />
<use href="#p" x="112" y="112" />
<use href="#p" x="98" y="126" />
<use href="#p" x="112" y="126" />
<use href="#p" x="98" y="140" />
<use href="#p" x="112" y="140" />
<use href="#p" x="98" y="154" />
<use href="#p" x="112" y="154" />
<use href="#p" x="98" y="168" />
<use href="#p" x="112" y="168" />
<use href="#p" x="0" y="168" />
<use href="#p" x="14" y="168" />
<use href="#p" x="28" y="168" />
<use href="#p" x="42" y="168" />
<use href="#p" x="56" y="168" />
<use href="#p" x="70" y="168" />
<use href="#p" x="84" y="168" />
<use href="#p" x="98" y="168" />
<use href="#p" x="112" y="168" />
<!-- ===== frpc(修正版:f 有完整竖线) ===== -->
<g transform="translate(49, 20)">
<!--
每个字母高度约 28px(4行×7px)
间距:字母之间空 14px(2行×7px)
f: y=0-27(竖线4行)
r: y=41-62
p: y=76-97
c: y=111-132
-->
<!-- ===== f:竖线(完整4行)+ 顶横 + 中横 ===== -->
<!-- 竖线(左侧,从顶到底连续4行) -->
<use href="#q" x="0" y="0" />
<use href="#q" x="0" y="7" />
<use href="#q" x="0" y="14" />
<use href="#q" x="0" y="21" />
<!-- 顶横(向右延伸) -->
<use href="#q" x="7" y="0" />
<use href="#q" x="14" y="0" />
<!-- 中横(向右延伸) -->
<use href="#q" x="7" y="14" />
<use href="#q" x="14" y="14" />
<!-- ===== r:竖线 + 顶横(一竖一横) ===== -->
<!-- 竖线(左侧,3行) -->
<use href="#q" x="0" y="41" />
<use href="#q" x="0" y="48" />
<use href="#q" x="0" y="55" />
<!-- 顶横(向右延伸) -->
<use href="#q" x="7" y="41" />
<use href="#q" x="14" y="41" />
<!-- ===== p:竖线(向下伸出)+ 右侧圆圈 ===== -->
<!-- 竖线(左侧,向下伸出5行) -->
<use href="#q" x="0" y="76" />
<use href="#q" x="0" y="83" />
<use href="#q" x="0" y="90" />
<use href="#q" x="0" y="97" />
<!-- 圆圈(右侧3×3闭合) -->
<use href="#q" x="7" y="76" />
<use href="#q" x="14" y="76" />
<use href="#q" x="14" y="83" />
<use href="#q" x="14" y="90" />
<use href="#q" x="7" y="90" />
<use href="#q" x="14" y="90" />
<!-- ===== c:开口朝右的弧形(左侧半圆) ===== -->
<!-- 左竖 -->
<use href="#q" x="0" y="111" />
<use href="#q" x="0" y="118" />
<use href="#q" x="0" y="125" />
<!-- 上弧 -->
<use href="#q" x="7" y="111" />
<use href="#q" x="14" y="111" />
<!-- 下弧 -->
<use href="#q" x="7" y="125" />
<use href="#q" x="14" y="125" />
</g>
</g>
<!-- I -->
<g transform="translate(288, 0)">
<use href="#p" x="0" y="0" />
<use href="#p" x="14" y="0" />
<use href="#p" x="28" y="0" />
<use href="#p" x="42" y="0" />
<use href="#p" x="56" y="0" />
<use href="#p" x="70" y="0" />
<use href="#p" x="28" y="14" />
<use href="#p" x="42" y="14" />
<use href="#p" x="28" y="28" />
<use href="#p" x="42" y="28" />
<use href="#p" x="28" y="42" />
<use href="#p" x="42" y="42" />
<use href="#p" x="28" y="56" />
<use href="#p" x="42" y="56" />
<use href="#p" x="28" y="70" />
<use href="#p" x="42" y="70" />
<use href="#p" x="28" y="84" />
<use href="#p" x="42" y="84" />
<use href="#p" x="28" y="98" />
<use href="#p" x="42" y="98" />
<use href="#p" x="28" y="112" />
<use href="#p" x="42" y="112" />
<use href="#p" x="28" y="126" />
<use href="#p" x="42" y="126" />
<use href="#p" x="28" y="140" />
<use href="#p" x="42" y="140" />
<use href="#p" x="28" y="154" />
<use href="#p" x="42" y="154" />
<use href="#p" x="0" y="168" />
<use href="#p" x="14" y="168" />
<use href="#p" x="28" y="168" />
<use href="#p" x="42" y="168" />
<use href="#p" x="56" y="168" />
<use href="#p" x="70" y="168" />
</g>
</g>
<!-- ========== 外围装饰 ========== -->
<g transform="translate(40, 40)">
<use href="#s" x="0" y="0" />
<use href="#s" x="0" y="12" />
<use href="#s" x="6" y="6" />
<use href="#s" x="12" y="0" />
<use href="#s" x="12" y="12" />
</g>
<use href="#d" x="440" y="40" />
<use href="#d" x="40" y="440" />
<g transform="translate(436, 436)">
<use href="#s" x="0" y="0" />
<use href="#s" x="0" y="12" />
<use href="#s" x="6" y="6" />
<use href="#s" x="12" y="0" />
<use href="#s" x="12" y="12" />
</g>
<!-- 黑色装饰点 -->
<rect x="90" y="380" width="14" height="14" fill="#000000" />
<rect x="420" y="140" width="14" height="14" fill="#000000" />
<rect x="230" y="50" width="14" height="14" fill="#000000" />
<!-- 蓝色小点缀 -->
<rect x="180" y="400" width="8" height="8" fill="#2563eb" />
<rect x="370" y="80" width="8" height="8" fill="#2563eb" />
<rect x="50" y="250" width="8" height="8" fill="#2563eb" />
</svg>