Files
halo/ui/uc-src/router/guards/permission.ts
Ryan Wang ac88ee70cb Rename @halo-dev/console-shared to @halo-dev/ui-shared (#7926)
#### What type of PR is this?

/area ui
/kind api-change
/milestone 2.22.x

#### What this PR does / why we need it:

See #7925 

#### Which issue(s) this PR fixes:

Fixes #7925 

#### Special notes for your reviewer:

#### Does this PR introduce a user-facing change?

```release-note
将 `@halo-dev/console-shared` 重命名为 `@halo-dev/ui-shared`
```
2025-11-10 16:20:41 +00:00

43 lines
939 B
TypeScript

import { utils } from "@halo-dev/ui-shared";
import type { RouteLocationNormalized, Router } from "vue-router";
export function setupPermissionGuard(router: Router) {
router.beforeEach(async (to, _from, next) => {
if (
await checkRoutePermissions(
to,
utils.permission.getUserPermissions() || []
)
) {
next();
} else {
next({ name: "Forbidden" });
}
});
}
async function checkRoutePermissions(
to: RouteLocationNormalized,
uiPermissions: string[]
): Promise<boolean> {
const { meta } = to;
if (!meta?.permissions) {
return true;
}
if (typeof meta.permissions === "function") {
try {
return await meta.permissions(uiPermissions);
} catch (e) {
console.error(
`Error checking permissions for route ${String(to.name)}:`,
e
);
return false;
}
}
return utils.permission.has(meta.permissions as string[]);
}