feat: harden data access and simplify user management
This commit is contained in:
1 parent
3dd5731751
commit
adb780bc82
51 files changed
+3239
-2121
No files matched your search
+21
-16
@@ -23,9 +23,6 @@ import ProjectUserExperiencePanel from "./panels/plaza/ProjectUserExperiencePane
|
||||
import OntologySchemaPanel from "./panels/modeling/OntologySchemaPanel";
|
||||
|
||||
// System panels
|
||||
import AgentTasksPanel from "./panels/system/AgentTasksPanel";
|
||||
import LogsPanel from "./panels/system/LogsPanel";
|
||||
import PermissionsAudit from "./panels/system/PermissionsAudit";
|
||||
import UserManagement from "./panels/system/UserManagement";
|
||||
import InterfaceCenterPanel from "./panels/system/InterfaceCenterPanel";
|
||||
|
||||
@@ -51,10 +48,7 @@ const MENU_ITEMS = [
|
||||
]},
|
||||
{ key: "/system", icon: <SettingOutlined />, label: "系统", children: [
|
||||
{ key: "/system/interfaces", icon: <ApiOutlined />, label: "接口中心" },
|
||||
{ key: "/system/agents", label: "Agent 任务" },
|
||||
{ key: "/system/logs", label: "调用日志" },
|
||||
{ key: "/system/users", label: "用户管理" },
|
||||
{ key: "/system/permissions", label: "角色权限" },
|
||||
]},
|
||||
];
|
||||
|
||||
@@ -62,6 +56,7 @@ export default function App() {
|
||||
const [authed, setAuthed] = useState(false);
|
||||
const [checking, setChecking] = useState(true);
|
||||
const [collapsed, setCollapsed] = useState(false);
|
||||
const [roles, setRoles] = useState<string[]>([]);
|
||||
const [projectContext, setProjectContextState] = useState<KgProjectContext>(getProjectContext());
|
||||
const navigate = useNavigate();
|
||||
const location = useLocation();
|
||||
@@ -70,10 +65,12 @@ export default function App() {
|
||||
const token = localStorage.getItem("token");
|
||||
if (!token) { setChecking(false); return; }
|
||||
try {
|
||||
await whoami();
|
||||
const { data } = await whoami();
|
||||
setRoles(Array.isArray(data?.roles) ? data.roles : []);
|
||||
setAuthed(true);
|
||||
} catch {
|
||||
localStorage.removeItem("token");
|
||||
setRoles([]);
|
||||
}
|
||||
setChecking(false);
|
||||
}, []);
|
||||
@@ -88,6 +85,7 @@ export default function App() {
|
||||
|
||||
const handleLogout = () => {
|
||||
localStorage.removeItem("token");
|
||||
setRoles([]);
|
||||
setAuthed(false);
|
||||
navigate("/admin/login");
|
||||
};
|
||||
@@ -97,8 +95,8 @@ export default function App() {
|
||||
if (!authed) {
|
||||
return (
|
||||
<Routes>
|
||||
<Route path="/admin/login" element={<AdminLogin onLogin={() => { setAuthed(true); navigate("/admin/projects"); }} />} />
|
||||
<Route path="/admin/login-v2" element={<AdminLoginV2 onLogin={() => { setAuthed(true); navigate("/admin/projects"); }} />} />
|
||||
<Route path="/admin/login" element={<AdminLogin onLogin={() => { setAuthed(true); void checkAuth(); navigate("/admin/projects"); }} />} />
|
||||
<Route path="/admin/login-v2" element={<AdminLoginV2 onLogin={() => { setAuthed(true); void checkAuth(); navigate("/admin/projects"); }} />} />
|
||||
<Route path="*" element={<Navigate to="/admin/login" />} />
|
||||
</Routes>
|
||||
);
|
||||
@@ -116,6 +114,10 @@ export default function App() {
|
||||
const openKeys = [selectedKey.split("/").slice(0, 2).join("/")];
|
||||
const showProjectContextBar = location.pathname === "/admin/projects";
|
||||
const showDataCenterWorkbench = location.pathname === "/admin/data";
|
||||
const isDataManager = roles.includes("admin");
|
||||
const visibleMenuItems = isDataManager
|
||||
? MENU_ITEMS
|
||||
: MENU_ITEMS.filter((item) => item.key !== "/system");
|
||||
|
||||
return (
|
||||
<Layout className="admin-layout" style={{ minHeight: "100vh" }}>
|
||||
@@ -147,7 +149,7 @@ export default function App() {
|
||||
mode="inline"
|
||||
selectedKeys={[selectedKey]}
|
||||
defaultOpenKeys={collapsed ? [] : openKeys}
|
||||
items={MENU_ITEMS}
|
||||
items={visibleMenuItems}
|
||||
onClick={onMenuClick}
|
||||
style={{ borderRight: 0 }}
|
||||
/>
|
||||
@@ -177,7 +179,7 @@ export default function App() {
|
||||
{showProjectContextBar && <ProjectContextBar />}
|
||||
<Routes>
|
||||
<Route path="/admin/projects" element={<ProjectLanding />} />
|
||||
<Route path="/admin/data" element={<DataCenterPanel />} />
|
||||
<Route path="/admin/data" element={<DataCenterPanel canManage={isDataManager} />} />
|
||||
{/* Plaza */}
|
||||
<Route path="/admin/plaza/overview" element={<PlazaOverview />} />
|
||||
<Route path="/admin/plaza/user" element={<ProjectUserExperiencePanel />} />
|
||||
@@ -187,11 +189,14 @@ export default function App() {
|
||||
<Route path="/admin/modeling/schema" element={<OntologySchemaPanel />} />
|
||||
|
||||
{/* System */}
|
||||
<Route path="/admin/system/interfaces" element={<InterfaceCenterPanel />} />
|
||||
<Route path="/admin/system/agents" element={<AgentTasksPanel />} />
|
||||
<Route path="/admin/system/logs" element={<LogsPanel />} />
|
||||
<Route path="/admin/system/users" element={<UserManagement />} />
|
||||
<Route path="/admin/system/permissions" element={<PermissionsAudit />} />
|
||||
<Route
|
||||
path="/admin/system/interfaces"
|
||||
element={isDataManager ? <InterfaceCenterPanel /> : <Navigate to="/admin/projects" />}
|
||||
/>
|
||||
<Route
|
||||
path="/admin/system/users"
|
||||
element={isDataManager ? <UserManagement /> : <Navigate to="/admin/projects" />}
|
||||
/>
|
||||
|
||||
<Route path="/admin/login-v2" element={<AdminLoginV2 onLogin={() => navigate("/admin/projects")} />} />
|
||||
<Route path="*" element={<Navigate to="/admin/projects" />} />
|
||||
|
||||
Reference in new issue
Block a user