@reskin/core 0.0.13 → 0.0.14
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 +7 -1
- package/bundles/reskin-core-guards.umd.js.map +1 -1
- package/esm2015/guards/auth.guard.js +8 -2
- package/fesm2015/reskin-core-guards.js +7 -1
- package/fesm2015/reskin-core-guards.js.map +1 -1
- package/guards/auth.guard.d.ts +1 -0
- package/package.json +1 -1
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
if (authRoutes.has(cleanUrl)) {
|
|
49
49
|
return true;
|
|
50
50
|
}
|
|
51
|
-
var _a = childRoute
|
|
51
|
+
var _a = this.routeData(childRoute), extendAuth = _a.extendAuth, extendRoutes = _a.extendRoutes;
|
|
52
52
|
if (extendAuth && extendRoutes) {
|
|
53
53
|
var hasWildcardMatch = extendRoutes.some(function (route) { return route.includes('**') ? _this.match(route, cleanUrl) : route === cleanUrl; });
|
|
54
54
|
if (hasWildcardMatch) {
|
|
@@ -66,6 +66,12 @@
|
|
|
66
66
|
console.error("\u65E0\u6743\u9650\u8BBF\u95EE\u8DEF\u7531\u5730\u5740: " + url);
|
|
67
67
|
this.router.navigate(['/errors/401']).then();
|
|
68
68
|
};
|
|
69
|
+
RkAuthGuard.prototype.routeData = function (childRoute) {
|
|
70
|
+
if (childRoute.data && childRoute.data['extendAuth']) {
|
|
71
|
+
return childRoute.data;
|
|
72
|
+
}
|
|
73
|
+
return childRoute.parent ? this.routeData(childRoute.parent) : {};
|
|
74
|
+
};
|
|
69
75
|
return RkAuthGuard;
|
|
70
76
|
}());
|
|
71
77
|
RkAuthGuard.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: RkAuthGuard, deps: [{ token: i1__namespace.RkMenuService }, { token: i2__namespace.Router }], target: i0__namespace.ɵɵFactoryTarget.Injectable });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reskin-core-guards.umd.js","sources":["../../../library/core/guards/auth.guard.ts","../../../library/core/guards/reskin-core-guards.ts"],"sourcesContent":["import { Injectable } 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@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RkAuthGuard implements CanActivateChild {\r\n constructor(\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 cleanUrl = url.replace(/\\?.*/, '');\r\n const authRoutes = new Set<string>(menus.map((m) => m.SYSTEM_RESOURCE_URL));\r\n\r\n if (authRoutes.has(cleanUrl)) {\r\n return true;\r\n }\r\n\r\n const { extendAuth, extendRoutes } = childRoute
|
|
1
|
+
{"version":3,"file":"reskin-core-guards.umd.js","sources":["../../../library/core/guards/auth.guard.ts","../../../library/core/guards/reskin-core-guards.ts"],"sourcesContent":["import { Injectable } 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@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RkAuthGuard implements CanActivateChild {\r\n constructor(\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 cleanUrl = url.replace(/\\?.*/, '');\r\n const authRoutes = new Set<string>(menus.map((m) => m.SYSTEM_RESOURCE_URL));\r\n\r\n if (authRoutes.has(cleanUrl)) {\r\n return true;\r\n }\r\n\r\n const { extendAuth, extendRoutes } = this.routeData(childRoute);\r\n if (extendAuth && extendRoutes) {\r\n const hasWildcardMatch = extendRoutes.some((route: string) =>\r\n route.includes('**') ? this.match(route, cleanUrl) : route === cleanUrl,\r\n );\r\n if (hasWildcardMatch) {\r\n return true;\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 private routeData(childRoute: ActivatedRouteSnapshot): { extendAuth: boolean; extendRoutes: string[] } {\r\n if (childRoute.data && childRoute.data['extendAuth']) {\r\n return childRoute.data as { extendAuth: boolean; extendRoutes: string[] };\r\n }\r\n return childRoute.parent ? this.routeData(childRoute.parent) : <{ extendAuth: boolean; extendRoutes: string[] }>{};\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["filter","map","catchError","i1","i2","i0","Injectable"],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ export class RkAuthGuard {
|
|
|
23
23
|
if (authRoutes.has(cleanUrl)) {
|
|
24
24
|
return true;
|
|
25
25
|
}
|
|
26
|
-
const { extendAuth, extendRoutes } = childRoute
|
|
26
|
+
const { extendAuth, extendRoutes } = this.routeData(childRoute);
|
|
27
27
|
if (extendAuth && extendRoutes) {
|
|
28
28
|
const hasWildcardMatch = extendRoutes.some((route) => route.includes('**') ? this.match(route, cleanUrl) : route === cleanUrl);
|
|
29
29
|
if (hasWildcardMatch) {
|
|
@@ -41,6 +41,12 @@ export class RkAuthGuard {
|
|
|
41
41
|
console.error(`无权限访问路由地址: ${url}`);
|
|
42
42
|
this.router.navigate(['/errors/401']).then();
|
|
43
43
|
}
|
|
44
|
+
routeData(childRoute) {
|
|
45
|
+
if (childRoute.data && childRoute.data['extendAuth']) {
|
|
46
|
+
return childRoute.data;
|
|
47
|
+
}
|
|
48
|
+
return childRoute.parent ? this.routeData(childRoute.parent) : {};
|
|
49
|
+
}
|
|
44
50
|
}
|
|
45
51
|
RkAuthGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkAuthGuard, deps: [{ token: i1.RkMenuService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
46
52
|
RkAuthGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkAuthGuard, providedIn: 'root' });
|
|
@@ -50,4 +56,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
50
56
|
providedIn: 'root',
|
|
51
57
|
}]
|
|
52
58
|
}], ctorParameters: function () { return [{ type: i1.RkMenuService }, { type: i2.Router }]; } });
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnJhcnkvY29yZS9ndWFyZHMvYXV0aC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBTXpELE1BQU0sT0FBTyxXQUFXO0lBQ3BCLFlBQ1ksSUFBbUIsRUFDbkIsTUFBYztRQURkLFNBQUksR0FBSixJQUFJLENBQWU7UUFDbkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUN2QixDQUFDO0lBRUosZ0JBQWdCLENBQ1osVUFBa0MsRUFDbEMsS0FBMEI7UUFFMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FDL0IsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUNqQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDeEIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQzlELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTyxXQUFXLENBQUMsS0FBWSxFQUFFLFVBQWtDLEVBQUUsR0FBVztRQUM3RSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDbEM7UUFFRCxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6QyxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBUyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1FBRTVFLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsTUFBTSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hFLElBQUksVUFBVSxJQUFJLFlBQVksRUFBRTtZQUM1QixNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUN6RCxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FDMUUsQ0FBQztZQUNGLElBQUksZ0JBQWdCLEVBQUU7Z0JBQ2xCLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7U0FDSjtRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVPLEtBQUssQ0FBQyxPQUFlLEVBQUUsSUFBWTtRQUN2QyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRCxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVPLGNBQWMsQ0FBQyxHQUFXO1FBQzlCLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRU8sU0FBUyxDQUFDLFVBQWtDO1FBQ2hELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ2xELE9BQU8sVUFBVSxDQUFDLElBQXVELENBQUM7U0FDN0U7UUFDRCxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBa0QsRUFBRSxDQUFDO0lBQ3ZILENBQUM7O3lHQTlEUSxXQUFXOzZHQUFYLFdBQVcsY0FGUixNQUFNOzRGQUVULFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBDYW5BY3RpdmF0ZUNoaWxkLCBSb3V0ZXIsIFJvdXRlclN0YXRlU25hcHNob3QsIFVybFRyZWUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBSa01lbnVTZXJ2aWNlIH0gZnJvbSAnQHJlc2tpbi9jb3JlL3NlcnZpY2VzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJrQXV0aEd1YXJkIGltcGxlbWVudHMgQ2FuQWN0aXZhdGVDaGlsZCB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIG1lbnU6IFJrTWVudVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICkge31cclxuXHJcbiAgICBjYW5BY3RpdmF0ZUNoaWxkKFxyXG4gICAgICAgIGNoaWxkUm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgICAgICAgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QsXHJcbiAgICApOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBVcmxUcmVlPiB8IFByb21pc2U8Ym9vbGVhbiB8IFVybFRyZWU+IHwgYm9vbGVhbiB8IFVybFRyZWUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1lbnUucmVxdWVzdERhdGEoKS5waXBlKFxyXG4gICAgICAgICAgICBmaWx0ZXIoKGpzb24pID0+IGpzb24uY29kZSA9PT0gMCksXHJcbiAgICAgICAgICAgIG1hcCgoanNvbikgPT4ganNvbi5kYXRhKSxcclxuICAgICAgICAgICAgbWFwKChtZW51cykgPT4gdGhpcy5jaGVja0FjY2VzcyhtZW51cywgY2hpbGRSb3V0ZSwgc3RhdGUudXJsKSksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVOb0FjY2VzcyhzdGF0ZS51cmwpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtmYWxzZV07XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja0FjY2VzcyhtZW51czogYW55W10sIGNoaWxkUm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHVybDogc3RyaW5nKTogYm9vbGVhbiB8IFVybFRyZWUge1xyXG4gICAgICAgIGlmICghbWVudXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5q2k6LSm5Y+35peg5Lu75L2V5Yqf6IO95p2D6ZmQLmApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY2xlYW5VcmwgPSB1cmwucmVwbGFjZSgvXFw/LiovLCAnJyk7XHJcbiAgICAgICAgY29uc3QgYXV0aFJvdXRlcyA9IG5ldyBTZXQ8c3RyaW5nPihtZW51cy5tYXAoKG0pID0+IG0uU1lTVEVNX1JFU09VUkNFX1VSTCkpO1xyXG5cclxuICAgICAgICBpZiAoYXV0aFJvdXRlcy5oYXMoY2xlYW5VcmwpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgeyBleHRlbmRBdXRoLCBleHRlbmRSb3V0ZXMgfSA9IHRoaXMucm91dGVEYXRhKGNoaWxkUm91dGUpO1xyXG4gICAgICAgIGlmIChleHRlbmRBdXRoICYmIGV4dGVuZFJvdXRlcykge1xyXG4gICAgICAgICAgICBjb25zdCBoYXNXaWxkY2FyZE1hdGNoID0gZXh0ZW5kUm91dGVzLnNvbWUoKHJvdXRlOiBzdHJpbmcpID0+XHJcbiAgICAgICAgICAgICAgICByb3V0ZS5pbmNsdWRlcygnKionKSA/IHRoaXMubWF0Y2gocm91dGUsIGNsZWFuVXJsKSA6IHJvdXRlID09PSBjbGVhblVybCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGhhc1dpbGRjYXJkTWF0Y2gpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmhhbmRsZU5vQWNjZXNzKHVybCk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWF0Y2gocGF0dGVybjogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCByZWdleFBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoL1xcKlxcKi9nLCAnLionKTtcclxuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgXiR7cmVnZXhQYXR0ZXJufSRgKS50ZXN0KHBhdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlTm9BY2Nlc3ModXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGDml6DmnYPpmZDorr/pl67ot6/nlLHlnLDlnYA6ICR7dXJsfWApO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2Vycm9ycy80MDEnXSkudGhlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcm91dGVEYXRhKGNoaWxkUm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiB7IGV4dGVuZEF1dGg6IGJvb2xlYW47IGV4dGVuZFJvdXRlczogc3RyaW5nW10gfSB7XHJcbiAgICAgICAgaWYgKGNoaWxkUm91dGUuZGF0YSAmJiBjaGlsZFJvdXRlLmRhdGFbJ2V4dGVuZEF1dGgnXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY2hpbGRSb3V0ZS5kYXRhIGFzIHsgZXh0ZW5kQXV0aDogYm9vbGVhbjsgZXh0ZW5kUm91dGVzOiBzdHJpbmdbXSB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2hpbGRSb3V0ZS5wYXJlbnQgPyB0aGlzLnJvdXRlRGF0YShjaGlsZFJvdXRlLnBhcmVudCkgOiA8eyBleHRlbmRBdXRoOiBib29sZWFuOyBleHRlbmRSb3V0ZXM6IHN0cmluZ1tdIH0+e307XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -24,7 +24,7 @@ class RkAuthGuard {
|
|
|
24
24
|
if (authRoutes.has(cleanUrl)) {
|
|
25
25
|
return true;
|
|
26
26
|
}
|
|
27
|
-
const { extendAuth, extendRoutes } = childRoute
|
|
27
|
+
const { extendAuth, extendRoutes } = this.routeData(childRoute);
|
|
28
28
|
if (extendAuth && extendRoutes) {
|
|
29
29
|
const hasWildcardMatch = extendRoutes.some((route) => route.includes('**') ? this.match(route, cleanUrl) : route === cleanUrl);
|
|
30
30
|
if (hasWildcardMatch) {
|
|
@@ -42,6 +42,12 @@ class RkAuthGuard {
|
|
|
42
42
|
console.error(`无权限访问路由地址: ${url}`);
|
|
43
43
|
this.router.navigate(['/errors/401']).then();
|
|
44
44
|
}
|
|
45
|
+
routeData(childRoute) {
|
|
46
|
+
if (childRoute.data && childRoute.data['extendAuth']) {
|
|
47
|
+
return childRoute.data;
|
|
48
|
+
}
|
|
49
|
+
return childRoute.parent ? this.routeData(childRoute.parent) : {};
|
|
50
|
+
}
|
|
45
51
|
}
|
|
46
52
|
RkAuthGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkAuthGuard, deps: [{ token: i1.RkMenuService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
47
53
|
RkAuthGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkAuthGuard, providedIn: 'root' });
|
|
@@ -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 { 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@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RkAuthGuard implements CanActivateChild {\r\n constructor(\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 cleanUrl = url.replace(/\\?.*/, '');\r\n const authRoutes = new Set<string>(menus.map((m) => m.SYSTEM_RESOURCE_URL));\r\n\r\n if (authRoutes.has(cleanUrl)) {\r\n return true;\r\n }\r\n\r\n const { extendAuth, extendRoutes } = childRoute
|
|
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 { 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@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RkAuthGuard implements CanActivateChild {\r\n constructor(\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 cleanUrl = url.replace(/\\?.*/, '');\r\n const authRoutes = new Set<string>(menus.map((m) => m.SYSTEM_RESOURCE_URL));\r\n\r\n if (authRoutes.has(cleanUrl)) {\r\n return true;\r\n }\r\n\r\n const { extendAuth, extendRoutes } = this.routeData(childRoute);\r\n if (extendAuth && extendRoutes) {\r\n const hasWildcardMatch = extendRoutes.some((route: string) =>\r\n route.includes('**') ? this.match(route, cleanUrl) : route === cleanUrl,\r\n );\r\n if (hasWildcardMatch) {\r\n return true;\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 private routeData(childRoute: ActivatedRouteSnapshot): { extendAuth: boolean; extendRoutes: string[] } {\r\n if (childRoute.data && childRoute.data['extendAuth']) {\r\n return childRoute.data as { extendAuth: boolean; extendRoutes: string[] };\r\n }\r\n return childRoute.parent ? this.routeData(childRoute.parent) : <{ extendAuth: boolean; extendRoutes: string[] }>{};\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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"}
|
package/guards/auth.guard.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export declare class RkAuthGuard implements CanActivateChild {
|
|
|
10
10
|
private checkAccess;
|
|
11
11
|
private match;
|
|
12
12
|
private handleNoAccess;
|
|
13
|
+
private routeData;
|
|
13
14
|
static ɵfac: i0.ɵɵFactoryDeclaration<RkAuthGuard, never>;
|
|
14
15
|
static ɵprov: i0.ɵɵInjectableDeclaration<RkAuthGuard>;
|
|
15
16
|
}
|