fix: align permission navigation and page access

This commit is contained in:
2026-07-11 14:55:49 +08:00
parent 1e1c476bc3
commit b6fca99390
27 changed files with 434 additions and 49 deletions

View File

@@ -0,0 +1,14 @@
import React from 'react';
import { Navigate } from 'react-router-dom';
import { Result } from 'antd';
import { usePermission } from '../hooks/usePermission';
import { findFirstAccessiblePath } from '../auth/permission-navigation';
const DefaultRoute: React.FC = () => {
const { permissions } = usePermission();
const firstPath = findFirstAccessiblePath(permissions);
if (firstPath) return <Navigate to={firstPath} replace />;
return <Result status="403" title="暂无可访问功能" subTitle="请联系管理员为当前账号分配功能权限" />;
};
export default DefaultRoute;

View File

@@ -1,5 +1,7 @@
import React from 'react';
import { Result } from 'antd';
import { Result, Button } from 'antd';
import { useNavigate } from 'react-router-dom';
import { findFirstAccessiblePath } from '../auth/permission-navigation';
import { usePermission } from '../hooks/usePermission';
interface PermissionRouteProps {
@@ -8,9 +10,18 @@ interface PermissionRouteProps {
}
const PermissionRoute: React.FC<PermissionRouteProps> = ({ permission, children }) => {
const { hasPermission } = usePermission();
const { permissions, hasPermission } = usePermission();
const navigate = useNavigate();
if (!hasPermission(permission)) {
return <Result status="403" title="无权访问" subTitle="您没有访问此页面的权限" />;
const firstPath = findFirstAccessiblePath(permissions);
return (
<Result
status="403"
title="无权访问"
subTitle="您没有访问此页面的权限"
extra={firstPath ? <Button type="primary" onClick={() => navigate(firstPath, { replace: true })}>访</Button> : undefined}
/>
);
}
return <>{children}</>;
};