ow
This commit is contained in:
1 parent
6a8258ac4b
commit
a7b25d49c4
29 files changed
+1960
-649
No files matched your search
@@ -12,6 +12,7 @@
|
||||
*/
|
||||
import type { ErrorPageName, PageName } from "@/router/routes";
|
||||
import { getJwtInfo } from "@/common/http.interceptor";
|
||||
import { canVisitPage } from "@/permission/permission-context";
|
||||
import {
|
||||
errorPageUrl,
|
||||
isAuthFree,
|
||||
@@ -32,7 +33,7 @@ function isLoggedIn(): boolean {
|
||||
* 判定目标地址该被拦成哪个错误页;返回 null 表示放行
|
||||
*
|
||||
* 顺序即语义:地址不存在(404) -> 没登录(401) -> 没权限(403)
|
||||
* 403 这层要等 PAGE_PERMISSIONS 与 PermissionContext 移植后接在这里
|
||||
* 403 必须排在 401 之后:未登录时权限档案多半也是空的,先给 401 才谈得上"去登录"
|
||||
*/
|
||||
function evaluate(url: string): ErrorPageName | null {
|
||||
const name: PageName | null = resolvePageName(url);
|
||||
@@ -45,6 +46,9 @@ function evaluate(url: string): ErrorPageName | null {
|
||||
if (!isLoggedIn()) {
|
||||
return "error401";
|
||||
}
|
||||
if (!canVisitPage(name)) {
|
||||
return "error403";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
* 因此"路径比较"必须用 toRealPath(),只有"跳转用的 URL"才允许用 pageUrl();
|
||||
* - 详细设计与源码证据见 src/md/page-routing.md。
|
||||
*/
|
||||
import type { PermissionNames } from "@/permission/permission-kernel";
|
||||
|
||||
export const PAGE_PATHS = {
|
||||
login: "pages/login/login",
|
||||
dashboard: "pages/dashboard/dashboard",
|
||||
@@ -43,9 +45,11 @@ export const AUTH_FREE_PAGES: PageName[] = [
|
||||
|
||||
/**
|
||||
* 页面所需权限名(权限守卫用,格式同旧系统 meta.permission)。
|
||||
* 暂未接入:等菜单/功能权限体系移植时逐条填进来,缺省表示不校验
|
||||
* 取值必须是后端 security_function.permission_name 里存在的功能名(如 ActorEnquiry、
|
||||
* DmsFileEnquiry),写错等于该页永远进不去;登记流程与反查方法见 src/md/permission.md。
|
||||
* 数组表示任一命中即放行。缺省(未登记)表示该页不做权限校验,登录校验照旧。
|
||||
*/
|
||||
export const PAGE_PERMISSIONS: Partial<Record<PageName, string>> = {};
|
||||
export const PAGE_PERMISSIONS: Partial<Record<PageName, PermissionNames>> = {};
|
||||
|
||||
/** 带前导斜杠的真实路径,供 uni.* API 之外的路径比较、日志使用 */
|
||||
export function toRealPath(name: PageName): string {
|
||||
@@ -97,6 +101,11 @@ export function normalizePath(url: string): string {
|
||||
* 认不出即返回 null,调用方据此判定"地址不存在"
|
||||
*/
|
||||
export function resolvePageName(url: string): PageName | null {
|
||||
// 空地址不算页面:normalizePath 会把 "" 归一成 "/",于是 "" 曾被认成入口页放行,
|
||||
// 登录页缺 ?redirect= 时就顺着这条判断把落地地址覆盖成了空串,reLaunch 直接 fail
|
||||
if (!String(url || "").trim()) {
|
||||
return null;
|
||||
}
|
||||
const path = normalizePath(url);
|
||||
const names = Object.keys(PAGE_PATHS) as PageName[];
|
||||
// "/" 是 H5 入口页(登录页)的路由 path,不对应任何字面配置
|
||||
|
||||
Reference in new issue
Block a user