25 lines
896 B
TypeScript
25 lines
896 B
TypeScript
/**
|
|
* 根据用户权限过滤路由
|
|
* @param routes - 权限路由
|
|
* @param permission - 权限
|
|
*/
|
|
export function filterAuthRoutesByUserPermission(routes: AuthRoute.Route[], permission: Auth.RoleType) {
|
|
return routes.map(route => filterAuthRouteByUserPermission(route, permission)).flat(1);
|
|
}
|
|
|
|
/**
|
|
* 根据用户权限过滤单个路由
|
|
* @param route - 单个权限路由
|
|
* @param permission - 权限
|
|
*/
|
|
function filterAuthRouteByUserPermission(route: AuthRoute.Route, permission: Auth.RoleType): AuthRoute.Route[] {
|
|
const hasPermission =
|
|
!route.meta.permissions || permission === 'super' || route.meta.permissions.includes(permission);
|
|
|
|
if (route.children) {
|
|
const filterChildren = route.children.map(item => filterAuthRouteByUserPermission(item, permission)).flat(1);
|
|
Object.assign(route, { children: filterChildren });
|
|
}
|
|
return hasPermission ? [route] : [];
|
|
}
|