@reskin/core 0.0.16 → 0.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/reskin-core-guards.umd.js +101 -581
- package/bundles/reskin-core-guards.umd.js.map +1 -1
- package/bundles/reskin-core-services.umd.js.map +1 -1
- package/esm2015/guards/auth.guard.js +33 -29
- package/esm2015/services/app.config.js +1 -1
- package/fesm2015/reskin-core-guards.js +33 -29
- package/fesm2015/reskin-core-guards.js.map +1 -1
- package/fesm2015/reskin-core-services.js.map +1 -1
- package/guards/auth.guard.d.ts +28 -4
- package/package.json +1 -1
- package/services/app.config.d.ts +2 -14
|
@@ -1,16 +1,31 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
1
|
+
import { Inject, Injectable, InjectionToken } from '@angular/core';
|
|
2
2
|
import { filter, map, catchError } from 'rxjs/operators';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
import * as i1 from "@reskin/core/services";
|
|
5
5
|
import * as i2 from "@angular/router";
|
|
6
|
+
/**
|
|
7
|
+
* 路由守卫配置注入令牌
|
|
8
|
+
*/
|
|
9
|
+
export const RK_ROUTER_GUARD_CONFIG = new InjectionToken('router_guard_config');
|
|
10
|
+
/**
|
|
11
|
+
* 路由守卫提供者配置函数
|
|
12
|
+
*
|
|
13
|
+
* @param urls - 路由守卫配置数组,包含需要保护的路由配置信息
|
|
14
|
+
* @returns 返回Angular依赖注入的Provider数组,用于配置路由守卫
|
|
15
|
+
*/
|
|
16
|
+
export function providerRouterGuard(urls) {
|
|
17
|
+
return [
|
|
18
|
+
// 路由守卫配置
|
|
19
|
+
{ provide: RK_ROUTER_GUARD_CONFIG, useValue: urls },
|
|
20
|
+
];
|
|
21
|
+
}
|
|
6
22
|
export class RkAuthGuard {
|
|
7
|
-
constructor(menu, router
|
|
23
|
+
constructor(config, menu, router) {
|
|
24
|
+
this.config = config;
|
|
8
25
|
this.menu = menu;
|
|
9
26
|
this.router = router;
|
|
10
|
-
this.activatedRoute = activatedRoute;
|
|
11
27
|
}
|
|
12
28
|
canActivateChild(childRoute, state) {
|
|
13
|
-
console.log(this.router);
|
|
14
29
|
return this.menu.requestData().pipe(filter((json) => json.code === 0), map((json) => json.data), map((menus) => this.checkAccess(menus, childRoute, state.url)), catchError(() => {
|
|
15
30
|
this.handleNoAccess(state.url);
|
|
16
31
|
return [false];
|
|
@@ -20,16 +35,17 @@ export class RkAuthGuard {
|
|
|
20
35
|
if (!menus.length) {
|
|
21
36
|
throw new Error(`此账号无任何功能权限.`);
|
|
22
37
|
}
|
|
23
|
-
const
|
|
38
|
+
const routerUrl = url.replace(/\?.*/, '');
|
|
24
39
|
const authRoutes = new Set(menus.map((m) => m.SYSTEM_RESOURCE_URL));
|
|
25
|
-
if (authRoutes.has(
|
|
40
|
+
if (authRoutes.has(routerUrl)) {
|
|
26
41
|
return true;
|
|
27
42
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
43
|
+
if (this.config && this.config.length > 0) {
|
|
44
|
+
const extendRoutes = this.config.filter((item) => {
|
|
45
|
+
return item.extends.some((route) => (route.includes('**') ? this.match(route, routerUrl) : route === routerUrl));
|
|
46
|
+
});
|
|
47
|
+
if (extendRoutes.length > 0) {
|
|
48
|
+
return extendRoutes.some((item) => authRoutes.has(item.url));
|
|
33
49
|
}
|
|
34
50
|
}
|
|
35
51
|
this.handleNoAccess(url);
|
|
@@ -43,28 +59,16 @@ export class RkAuthGuard {
|
|
|
43
59
|
console.error(`无权限访问路由地址: ${url}`);
|
|
44
60
|
this.router.navigate(['/errors/401']).then();
|
|
45
61
|
}
|
|
46
|
-
routeData(childRoute) {
|
|
47
|
-
// 直接检查当前路由的数据
|
|
48
|
-
if (childRoute.data && childRoute.data['extendAuth'] !== undefined) {
|
|
49
|
-
return childRoute.data;
|
|
50
|
-
}
|
|
51
|
-
// 遍历子路由查找
|
|
52
|
-
for (const child of childRoute.children) {
|
|
53
|
-
const result = this.routeData(child);
|
|
54
|
-
if (result.extendAuth !== undefined) {
|
|
55
|
-
return result;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
// 没有找到时返回默认值
|
|
59
|
-
return { extendAuth: false, extendRoutes: [] };
|
|
60
|
-
}
|
|
61
62
|
}
|
|
62
|
-
RkAuthGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkAuthGuard, deps: [{ token:
|
|
63
|
+
RkAuthGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkAuthGuard, deps: [{ token: RK_ROUTER_GUARD_CONFIG }, { token: i1.RkMenuService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
63
64
|
RkAuthGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkAuthGuard, providedIn: 'root' });
|
|
64
65
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkAuthGuard, decorators: [{
|
|
65
66
|
type: Injectable,
|
|
66
67
|
args: [{
|
|
67
68
|
providedIn: 'root',
|
|
68
69
|
}]
|
|
69
|
-
}], ctorParameters: function () { return [{ type:
|
|
70
|
-
|
|
70
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
71
|
+
type: Inject,
|
|
72
|
+
args: [RK_ROUTER_GUARD_CONFIG]
|
|
73
|
+
}] }, { type: i1.RkMenuService }, { type: i2.Router }]; } });
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnJhcnkvY29yZS9ndWFyZHMvYXV0aC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQVksTUFBTSxlQUFlLENBQUM7QUFHN0UsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFHekQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBZ0JoRjs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxJQUEwQjtJQUMxRCxPQUFPO1FBQ0gsU0FBUztRQUNULEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7S0FDdEQsQ0FBQztBQUNOLENBQUM7QUFLRCxNQUFNLE9BQU8sV0FBVztJQUNwQixZQUM0QyxNQUE0QixFQUM1RCxJQUFtQixFQUNuQixNQUFjO1FBRmtCLFdBQU0sR0FBTixNQUFNLENBQXNCO1FBQzVELFNBQUksR0FBSixJQUFJLENBQWU7UUFDbkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUN2QixDQUFDO0lBRUosZ0JBQWdCLENBQ1osVUFBa0MsRUFDbEMsS0FBMEI7UUFFMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FDL0IsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUNqQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDeEIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQzlELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTyxXQUFXLENBQUMsS0FBWSxFQUFFLFVBQWtDLEVBQUUsR0FBVztRQUM3RSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDbEM7UUFFRCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBUyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1FBRTVFLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMzQixPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUM3QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztZQUM3SCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3pCLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUNoRTtTQUNKO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU8sS0FBSyxDQUFDLE9BQWUsRUFBRSxJQUFZO1FBQ3ZDLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BELE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sY0FBYyxDQUFDLEdBQVc7UUFDOUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2pELENBQUM7O3lHQXZEUSxXQUFXLGtCQUVSLHNCQUFzQjs2R0FGekIsV0FBVyxjQUZSLE1BQU07NEZBRVQsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQUdRLE1BQU07MkJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgQ2FuQWN0aXZhdGVDaGlsZCwgUm91dGVyLCBSb3V0ZXJTdGF0ZVNuYXBzaG90LCBVcmxUcmVlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUmtNZW51U2VydmljZSB9IGZyb20gJ0ByZXNraW4vY29yZS9zZXJ2aWNlcyc7XHJcblxyXG4vKipcclxuICog6Lev55Sx5a6I5Y2r6YWN572u5rOo5YWl5Luk54mMXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgUktfUk9VVEVSX0dVQVJEX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbigncm91dGVyX2d1YXJkX2NvbmZpZycpO1xyXG5cclxuLyoqXHJcbiAqIOi3r+eUseWuiOWNq+mFjee9rlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJUm91dGVyR3VhcmRDb25maWcge1xyXG4gICAgLyoqXHJcbiAgICAgKiDot6/nlLHlnLDlnYBcclxuICAgICAqL1xyXG4gICAgdXJsOiBzdHJpbmc7XHJcbiAgICAvKipcclxuICAgICAqIOe7p+aJv+eahOadg+mZkFxyXG4gICAgICovXHJcbiAgICBleHRlbmRzOiBzdHJpbmdbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOi3r+eUseWuiOWNq+aPkOS+m+iAhemFjee9ruWHveaVsFxyXG4gKlxyXG4gKiBAcGFyYW0gdXJscyAtIOi3r+eUseWuiOWNq+mFjee9ruaVsOe7hO+8jOWMheWQq+mcgOimgeS/neaKpOeahOi3r+eUsemFjee9ruS/oeaBr1xyXG4gKiBAcmV0dXJucyDov5Tlm55Bbmd1bGFy5L6d6LWW5rOo5YWl55qEUHJvdmlkZXLmlbDnu4TvvIznlKjkuo7phY3nva7ot6/nlLHlrojljatcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlclJvdXRlckd1YXJkKHVybHM6IElSb3V0ZXJHdWFyZENvbmZpZ1tdKTogUHJvdmlkZXJbXSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAgIC8vIOi3r+eUseWuiOWNq+mFjee9rlxyXG4gICAgICAgIHsgcHJvdmlkZTogUktfUk9VVEVSX0dVQVJEX0NPTkZJRywgdXNlVmFsdWU6IHVybHMgfSxcclxuICAgIF07XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJrQXV0aEd1YXJkIGltcGxlbWVudHMgQ2FuQWN0aXZhdGVDaGlsZCB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KFJLX1JPVVRFUl9HVUFSRF9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBJUm91dGVyR3VhcmRDb25maWdbXSxcclxuICAgICAgICBwcml2YXRlIG1lbnU6IFJrTWVudVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICkge31cclxuXHJcbiAgICBjYW5BY3RpdmF0ZUNoaWxkKFxyXG4gICAgICAgIGNoaWxkUm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgICAgICAgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QsXHJcbiAgICApOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBVcmxUcmVlPiB8IFByb21pc2U8Ym9vbGVhbiB8IFVybFRyZWU+IHwgYm9vbGVhbiB8IFVybFRyZWUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1lbnUucmVxdWVzdERhdGEoKS5waXBlKFxyXG4gICAgICAgICAgICBmaWx0ZXIoKGpzb24pID0+IGpzb24uY29kZSA9PT0gMCksXHJcbiAgICAgICAgICAgIG1hcCgoanNvbikgPT4ganNvbi5kYXRhKSxcclxuICAgICAgICAgICAgbWFwKChtZW51cykgPT4gdGhpcy5jaGVja0FjY2VzcyhtZW51cywgY2hpbGRSb3V0ZSwgc3RhdGUudXJsKSksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVOb0FjY2VzcyhzdGF0ZS51cmwpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtmYWxzZV07XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja0FjY2VzcyhtZW51czogYW55W10sIGNoaWxkUm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHVybDogc3RyaW5nKTogYm9vbGVhbiB8IFVybFRyZWUge1xyXG4gICAgICAgIGlmICghbWVudXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5q2k6LSm5Y+35peg5Lu75L2V5Yqf6IO95p2D6ZmQLmApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgcm91dGVyVXJsID0gdXJsLnJlcGxhY2UoL1xcPy4qLywgJycpO1xyXG4gICAgICAgIGNvbnN0IGF1dGhSb3V0ZXMgPSBuZXcgU2V0PHN0cmluZz4obWVudXMubWFwKChtKSA9PiBtLlNZU1RFTV9SRVNPVVJDRV9VUkwpKTtcclxuXHJcbiAgICAgICAgaWYgKGF1dGhSb3V0ZXMuaGFzKHJvdXRlclVybCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBleHRlbmRSb3V0ZXMgPSB0aGlzLmNvbmZpZy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmV4dGVuZHMuc29tZSgocm91dGU6IHN0cmluZykgPT4gKHJvdXRlLmluY2x1ZGVzKCcqKicpID8gdGhpcy5tYXRjaChyb3V0ZSwgcm91dGVyVXJsKSA6IHJvdXRlID09PSByb3V0ZXJVcmwpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChleHRlbmRSb3V0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4dGVuZFJvdXRlcy5zb21lKChpdGVtKSA9PiBhdXRoUm91dGVzLmhhcyhpdGVtLnVybCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmhhbmRsZU5vQWNjZXNzKHVybCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWF0Y2gocGF0dGVybjogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCByZWdleFBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoL1xcKlxcKi9nLCAnLionKTtcclxuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgXiR7cmVnZXhQYXR0ZXJufSRgKS50ZXN0KHBhdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlTm9BY2Nlc3ModXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGDml6DmnYPpmZDorr/pl67ot6/nlLHlnLDlnYA6ICR7dXJsfWApO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2Vycm9ycy80MDEnXSkudGhlbigpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -79,4 +79,4 @@ export function providerAppConfig(environment) {
|
|
|
79
79
|
},
|
|
80
80
|
];
|
|
81
81
|
}
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnJhcnkvY29yZS9zZXJ2aWNlcy9hcHAuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFZLE1BQU0sZUFBZSxDQUFDOzs7QUFJOUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7QUFLaEUsTUFBTSxPQUFPLFNBQVM7SUFNbEIsWUFDb0MsR0FBUSxFQUNoQyxLQUFZO1FBRFksUUFBRyxHQUFILEdBQUcsQ0FBSztRQUNoQyxVQUFLLEdBQUwsS0FBSyxDQUFPO0lBQ3JCLENBQUM7SUFFSjs7Ozs7O09BTUc7SUFDRyxNQUFNOztZQUNSLHVCQUF1QjtZQUN2QixNQUFNLEdBQUcsR0FBRyxpRUFBaUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNsSCxVQUFVO1lBQ1YsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEMsV0FBVztZQUNYLE1BQU0sSUFBSSxHQUFNLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RDLG9CQUFvQjtZQUNwQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO2dCQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM3QjtZQUNELFlBQVk7WUFDWixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQ2hHLHVCQUF1QjtZQUN2QixNQUFNLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEtBQUssTUFBTSxDQUFDO1lBQ2pELGdCQUFnQjtZQUNoQixTQUFTLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztZQUM1QixTQUFTO1lBQ1QsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNsRCxTQUFTO1lBQ1QsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQztLQUFBOzt1R0F2Q1EsU0FBUyxrQkFPTixjQUFjOzJHQVBqQixTQUFTLGNBRk4sTUFBTTs0RkFFVCxTQUFTO2tCQUhyQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBUVEsTUFBTTsyQkFBQyxjQUFjOztBQW1DOUI7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsV0FBZ0I7SUFDOUMsT0FBTztRQUNILDJDQUEyQztRQUMzQyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRTtRQUNsRCx3QkFBd0I7UUFDeEIsU0FBUztRQUNULDhEQUE4RDtRQUM5RCx1QkFBdUI7UUFDdkI7WUFDSSxPQUFPLEVBQUUsZUFBZTtZQUN4QixVQUFVLEVBQUUsQ0FBQyxTQUFvQixFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQzlELElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUNqQixLQUFLLEVBQUUsSUFBSSxFQUFFLHlCQUF5QjtTQUN6QztLQUNKLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBFbnYsIFIsIFdDIH0gZnJvbSAnQHJlc2tpbi9jb3JlL2VudGl0eSc7XHJcblxyXG4vKipcclxuICog6aG555uu546v5aKD5Y+Y6YeP6YWN572uIFRva2VuXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgUktfRU5WSVJPTk1FTlQgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ2Vudmlyb25tZW50Jyk7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcHBDb25maWcge1xyXG4gICAgLyoqXHJcbiAgICAgKiDpobnnm67phY3nva7poblcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHNldHRpbmdzOiBXQztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KFJLX0VOVklST05NRU5UKSBwcml2YXRlIGVudjogRW52LFxyXG4gICAgICAgIHByaXZhdGUgdGl0bGU6IFRpdGxlLFxyXG4gICAgKSB7fVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5byC5q2l5Yqg6L296YWN572u5pWw5o2uXHJcbiAgICAgKiDpgJrov4fosIPnlKhBUEnnq6/ngrnojrflj5bns7vnu5/lj4LmlbDvvIzop6PmnpDlubblupTnlKjov5nkupvlj4LmlbBcclxuICAgICAqIOWmguaenOiOt+WPluWPguaVsOWksei0peaIluWPguaVsOS4jeato+ehru+8jOWImeaKm+WHuumUmeivr1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPFdDPn0g6L+U5Zue6YWN572u5pWw5o2u55qEUHJvbWlzZVxyXG4gICAgICovXHJcbiAgICBhc3luYyBvbkxvYWQoKTogUHJvbWlzZTxXQz4ge1xyXG4gICAgICAgIC8vIOWumuS5iUFQSeivt+axgueahFVSTO+8jOeUqOS6juiOt+WPluezu+e7n+WPguaVsFxyXG4gICAgICAgIGNvbnN0IHVybCA9IGBhcGkvZ2wtc2VydmljZS1zeXMtY29yZS92MS9jb3JlL3N5c3RlbS9wYXJhbWV0ZXIvZ2V0T25lQnlDb2RlLyR7dGhpcy5lbnYuY29uZmlnLlBST0pFQ1RfQ09ORklHX0tFWX1gO1xyXG4gICAgICAgIC8vIOWPkei1t0FQSeivt+axglxyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKTtcclxuICAgICAgICAvLyDop6PmnpBKU09O5ZON5bqUXHJcbiAgICAgICAgY29uc3QganNvbjogUiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgICAvLyDmo4Dmn6Xlk43lupTnoIHvvIzlpoLmnpzkuI3kuLow77yM5YiZ5oqb5Ye66ZSZ6K+vXHJcbiAgICAgICAgaWYgKGpzb24uY29kZSAhPT0gMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoanNvbi5tc2cpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyDop6PmnpDlubblpITnkIbphY3nva7mlbDmja5cclxuICAgICAgICBjb25zdCBjb25maWcgPSBqc29uLmRhdGEuU1lTVEVNX1BBUkFNRVRFUl9WQUxVRSAmJiBKU09OLnBhcnNlKGpzb24uZGF0YS5TWVNURU1fUEFSQU1FVEVSX1ZBTFVFKTtcclxuICAgICAgICAvLyDlsIZwcm9kdWN0aW9u5a2X56ym5Liy6L2s5o2i5Li65biD5bCU5YC8XHJcbiAgICAgICAgY29uZmlnLnByb2R1Y3Rpb24gPSBjb25maWcucHJvZHVjdGlvbiA9PT0gJ3RydWUnO1xyXG4gICAgICAgIC8vIOWwhumFjee9ruaVsOaNruW6lOeUqOWIsOW6lOeUqOmFjee9ruS4rVxyXG4gICAgICAgIEFwcENvbmZpZy5zZXR0aW5ncyA9IGNvbmZpZztcclxuICAgICAgICAvLyDorr7nva7pobnnm67moIfpophcclxuICAgICAgICB0aGlzLnRpdGxlLnNldFRpdGxlKGNvbmZpZy5pbnNpZ2h0cy5QUk9KRUNUX05BTUUpO1xyXG4gICAgICAgIC8vIOi/lOWbnumFjee9ruaVsOaNrlxyXG4gICAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDphY3nva7lupTnlKjnmoTmj5DkvpvogIXlkozliJ3lp4vljJblh73mlbBcclxuICpcclxuICog5q2k5Ye95pWw55So5LqO6YWN572u5bqU55So56iL5bqP55qE5o+Q5L6b6ICF5ZKM5pyN5Yqh5Yid5aeL5YyW6YC76L6R5a6D6YCa6L+H5L6d6LWW5rOo5YWl5py65Yi277yMXHJcbiAqIOWwhueOr+Wig+mFjee9ruWSjOW6lOeUqOmFjee9ruWvueixoeaPkOS+m+e7meW6lOeUqO+8jOW5tuWcqOW6lOeUqOWQr+WKqOaXtuaJp+ihjOS4gOS4quWKoOi9veWHveaVsFxyXG4gKlxyXG4gKiBAcGFyYW0gZW52aXJvbm1lbnQg5bqU55So546v5aKD55qE6YWN572u5a+56LGh77yM5YyF5ZCr6L+Q6KGM5pe255qE5ZCE56eN546v5aKD5Y+Y6YeP5ZKM6YWN572uXHJcbiAqIEByZXR1cm5zIOi/lOWbnuS4gOS4quWMheWQq+aPkOS+m+iAhemFjee9rueahOaVsOe7hO+8jOeUqOS6jiBBcHBNb2R1bGUg55qE5o+Q5L6b6ICF5YiX6KGoXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZXJBcHBDb25maWcoZW52aXJvbm1lbnQ6IEVudik6IFByb3ZpZGVyW10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICAvLyDmj5Dkvpvnjq/looPphY3nva7nmoTmj5DkvpvogIXvvIzlsIbnjq/looPlr7nosaHkvZzkuLrlgLzmj5Dkvpvnu5kgUktfRU5WSVJPTk1FTlQg5Luk54mMXHJcbiAgICAgICAgeyBwcm92aWRlOiBSS19FTlZJUk9OTUVOVCwgdXNlVmFsdWU6IGVudmlyb25tZW50IH0sXHJcbiAgICAgICAgLy8g5bCGIEFwcENvbmZpZyDmnI3liqHmnKzouqvkvZzkuLrmj5DkvpvogIVcclxuICAgICAgICBBcHBDb25maWcsXHJcbiAgICAgICAgLy8g6YWN572uIEFQUF9JTklUSUFMSVpFUiDmj5DkvpvogIXvvIzkvb/nlKjlt6XljoLlh73mlbDlnKjlupTnlKjlkK/liqjml7bosIPnlKggYXBwQ29uZmlnIOeahCBvbkxvYWQg5pa55rOVXHJcbiAgICAgICAgLy8g6L+Z5YWB6K645Zyo5bqU55So5ZCv5Yqo5a6M5oiQ5ZCO5omn6KGM5LiA5Lqb5Yid5aeL5YyW6YC76L6RXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXHJcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IChhcHBDb25maWc6IEFwcENvbmZpZykgPT4gKCkgPT4gYXBwQ29uZmlnLm9uTG9hZCgpLFxyXG4gICAgICAgICAgICBkZXBzOiBbQXBwQ29uZmlnXSwgLy8g5oyH5a6a5L6d6LWWIEFwcENvbmZpZyBzZXJ2aWNlc1xyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSwgLy8g5qCH6K6w5q2k5Yid5aeL5YyW5Ye95pWw5Li65aSa5YC877yM5Y+v5Lul5pyJ5aSa5Liq5Yid5aeL5YyW5Ye95pWwXHJcbiAgICAgICAgfSxcclxuICAgIF07XHJcbn1cclxuIl19
|
|
@@ -1,17 +1,32 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
2
|
+
import { InjectionToken, Injectable, Inject } from '@angular/core';
|
|
3
3
|
import { filter, map, catchError } from 'rxjs/operators';
|
|
4
4
|
import * as i1 from '@reskin/core/services';
|
|
5
5
|
import * as i2 from '@angular/router';
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* 路由守卫配置注入令牌
|
|
9
|
+
*/
|
|
10
|
+
const RK_ROUTER_GUARD_CONFIG = new InjectionToken('router_guard_config');
|
|
11
|
+
/**
|
|
12
|
+
* 路由守卫提供者配置函数
|
|
13
|
+
*
|
|
14
|
+
* @param urls - 路由守卫配置数组,包含需要保护的路由配置信息
|
|
15
|
+
* @returns 返回Angular依赖注入的Provider数组,用于配置路由守卫
|
|
16
|
+
*/
|
|
17
|
+
function providerRouterGuard(urls) {
|
|
18
|
+
return [
|
|
19
|
+
// 路由守卫配置
|
|
20
|
+
{ provide: RK_ROUTER_GUARD_CONFIG, useValue: urls },
|
|
21
|
+
];
|
|
22
|
+
}
|
|
7
23
|
class RkAuthGuard {
|
|
8
|
-
constructor(menu, router
|
|
24
|
+
constructor(config, menu, router) {
|
|
25
|
+
this.config = config;
|
|
9
26
|
this.menu = menu;
|
|
10
27
|
this.router = router;
|
|
11
|
-
this.activatedRoute = activatedRoute;
|
|
12
28
|
}
|
|
13
29
|
canActivateChild(childRoute, state) {
|
|
14
|
-
console.log(this.router);
|
|
15
30
|
return this.menu.requestData().pipe(filter((json) => json.code === 0), map((json) => json.data), map((menus) => this.checkAccess(menus, childRoute, state.url)), catchError(() => {
|
|
16
31
|
this.handleNoAccess(state.url);
|
|
17
32
|
return [false];
|
|
@@ -21,16 +36,17 @@ class RkAuthGuard {
|
|
|
21
36
|
if (!menus.length) {
|
|
22
37
|
throw new Error(`此账号无任何功能权限.`);
|
|
23
38
|
}
|
|
24
|
-
const
|
|
39
|
+
const routerUrl = url.replace(/\?.*/, '');
|
|
25
40
|
const authRoutes = new Set(menus.map((m) => m.SYSTEM_RESOURCE_URL));
|
|
26
|
-
if (authRoutes.has(
|
|
41
|
+
if (authRoutes.has(routerUrl)) {
|
|
27
42
|
return true;
|
|
28
43
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
44
|
+
if (this.config && this.config.length > 0) {
|
|
45
|
+
const extendRoutes = this.config.filter((item) => {
|
|
46
|
+
return item.extends.some((route) => (route.includes('**') ? this.match(route, routerUrl) : route === routerUrl));
|
|
47
|
+
});
|
|
48
|
+
if (extendRoutes.length > 0) {
|
|
49
|
+
return extendRoutes.some((item) => authRoutes.has(item.url));
|
|
34
50
|
}
|
|
35
51
|
}
|
|
36
52
|
this.handleNoAccess(url);
|
|
@@ -44,34 +60,22 @@ class RkAuthGuard {
|
|
|
44
60
|
console.error(`无权限访问路由地址: ${url}`);
|
|
45
61
|
this.router.navigate(['/errors/401']).then();
|
|
46
62
|
}
|
|
47
|
-
routeData(childRoute) {
|
|
48
|
-
// 直接检查当前路由的数据
|
|
49
|
-
if (childRoute.data && childRoute.data['extendAuth'] !== undefined) {
|
|
50
|
-
return childRoute.data;
|
|
51
|
-
}
|
|
52
|
-
// 遍历子路由查找
|
|
53
|
-
for (const child of childRoute.children) {
|
|
54
|
-
const result = this.routeData(child);
|
|
55
|
-
if (result.extendAuth !== undefined) {
|
|
56
|
-
return result;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
// 没有找到时返回默认值
|
|
60
|
-
return { extendAuth: false, extendRoutes: [] };
|
|
61
|
-
}
|
|
62
63
|
}
|
|
63
|
-
RkAuthGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkAuthGuard, deps: [{ token:
|
|
64
|
+
RkAuthGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkAuthGuard, deps: [{ token: RK_ROUTER_GUARD_CONFIG }, { token: i1.RkMenuService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
64
65
|
RkAuthGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkAuthGuard, providedIn: 'root' });
|
|
65
66
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkAuthGuard, decorators: [{
|
|
66
67
|
type: Injectable,
|
|
67
68
|
args: [{
|
|
68
69
|
providedIn: 'root',
|
|
69
70
|
}]
|
|
70
|
-
}], ctorParameters: function () { return [{ type:
|
|
71
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
72
|
+
type: Inject,
|
|
73
|
+
args: [RK_ROUTER_GUARD_CONFIG]
|
|
74
|
+
}] }, { type: i1.RkMenuService }, { type: i2.Router }]; } });
|
|
71
75
|
|
|
72
76
|
/**
|
|
73
77
|
* Generated bundle index. Do not edit.
|
|
74
78
|
*/
|
|
75
79
|
|
|
76
|
-
export { RkAuthGuard };
|
|
80
|
+
export { RK_ROUTER_GUARD_CONFIG, RkAuthGuard, providerRouterGuard };
|
|
77
81
|
//# sourceMappingURL=reskin-core-guards.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reskin-core-guards.js","sources":["../../../library/core/guards/auth.guard.ts","../../../library/core/guards/reskin-core-guards.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport {
|
|
1
|
+
{"version":3,"file":"reskin-core-guards.js","sources":["../../../library/core/guards/auth.guard.ts","../../../library/core/guards/reskin-core-guards.ts"],"sourcesContent":["import { Inject, Injectable, InjectionToken, Provider } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivateChild, Router, RouterStateSnapshot, UrlTree } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\nimport { filter, map, catchError } from 'rxjs/operators';\r\nimport { RkMenuService } from '@reskin/core/services';\r\n\r\n/**\r\n * 路由守卫配置注入令牌\r\n */\r\nexport const RK_ROUTER_GUARD_CONFIG = new InjectionToken('router_guard_config');\r\n\r\n/**\r\n * 路由守卫配置\r\n */\r\nexport interface IRouterGuardConfig {\r\n /**\r\n * 路由地址\r\n */\r\n url: string;\r\n /**\r\n * 继承的权限\r\n */\r\n extends: string[];\r\n}\r\n\r\n/**\r\n * 路由守卫提供者配置函数\r\n *\r\n * @param urls - 路由守卫配置数组,包含需要保护的路由配置信息\r\n * @returns 返回Angular依赖注入的Provider数组,用于配置路由守卫\r\n */\r\nexport function providerRouterGuard(urls: IRouterGuardConfig[]): Provider[] {\r\n return [\r\n // 路由守卫配置\r\n { provide: RK_ROUTER_GUARD_CONFIG, useValue: urls },\r\n ];\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RkAuthGuard implements CanActivateChild {\r\n constructor(\r\n @Inject(RK_ROUTER_GUARD_CONFIG) private config: IRouterGuardConfig[],\r\n private menu: RkMenuService,\r\n private router: Router,\r\n ) {}\r\n\r\n canActivateChild(\r\n childRoute: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot,\r\n ): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\r\n return this.menu.requestData().pipe(\r\n filter((json) => json.code === 0),\r\n map((json) => json.data),\r\n map((menus) => this.checkAccess(menus, childRoute, state.url)),\r\n catchError(() => {\r\n this.handleNoAccess(state.url);\r\n return [false];\r\n }),\r\n );\r\n }\r\n\r\n private checkAccess(menus: any[], childRoute: ActivatedRouteSnapshot, url: string): boolean | UrlTree {\r\n if (!menus.length) {\r\n throw new Error(`此账号无任何功能权限.`);\r\n }\r\n\r\n const routerUrl = url.replace(/\\?.*/, '');\r\n const authRoutes = new Set<string>(menus.map((m) => m.SYSTEM_RESOURCE_URL));\r\n\r\n if (authRoutes.has(routerUrl)) {\r\n return true;\r\n }\r\n\r\n if (this.config && this.config.length > 0) {\r\n const extendRoutes = this.config.filter((item) => {\r\n return item.extends.some((route: string) => (route.includes('**') ? this.match(route, routerUrl) : route === routerUrl));\r\n });\r\n if (extendRoutes.length > 0) {\r\n return extendRoutes.some((item) => authRoutes.has(item.url));\r\n }\r\n }\r\n\r\n this.handleNoAccess(url);\r\n return false;\r\n }\r\n\r\n private match(pattern: string, path: string): boolean {\r\n const regexPattern = pattern.replace(/\\*\\*/g, '.*');\r\n return new RegExp(`^${regexPattern}$`).test(path);\r\n }\r\n\r\n private handleNoAccess(url: string): void {\r\n console.error(`无权限访问路由地址: ${url}`);\r\n this.router.navigate(['/errors/401']).then();\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|