permission.guard.js
14.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Injectable } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
import { AppConfigService } from '../app-config/app-config.service';
import { B2bService } from '../_services/b2b.service';
import * as i0 from "@angular/core";
import * as i1 from "@angular/router";
import * as i2 from "../_services/b2b.service";
import * as i3 from "../app-config/app-config.service";
export class PermissionGuard {
/**
* @param {?} router
* @param {?} route
* @param {?} dataservice
* @param {?} appConfigService
*/
constructor(router, route, dataservice, appConfigService) {
this.router = router;
this.route = route;
this.dataservice = dataservice;
this.appConfigService = appConfigService;
this.config = appConfigService.getConfig();
}
/**
* @param {?} next
* @param {?} state
* @return {?}
*/
canActivate(next, state) {
console.log(next.queryParams);
/** @type {?} */
let params = next.queryParams;
if (params["token"]) {
sessionStorage.setItem('token', params["token"]);
// token = params.token
return this.getPermission(next);
}
else if (params["token"] === '') {
return false;
}
else {
/** @type {?} */
const token = sessionStorage.getItem('token');
if (token) {
return this.getPermission(next);
}
else {
return false;
}
}
// const path = this.getUrlPath(next);
// let configData = null;
// configData = this.getConfigByUrl(path);
// if (configData) {
// if (this.dataservice.isCheckGuard(configData.role)) {
// return true;
// }
// else { return false; }
// } else { return true; }
}
/**
* @param {?} next
* @return {?}
*/
getPermission(next) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
/** @type {?} */
let verifyToken = yield this.dataservice.verify();
console.log("verifyToken", verifyToken, verifyToken['resultCode'] === '40100');
if (verifyToken['resultCode'] == '20000') {
/** @type {?} */
let path = this.getUrlPath(next);
/** @type {?} */
let configData = null;
configData = this.getConfigByUrl(path);
console.log('configData ', configData);
if (configData) {
if (this.dataservice.isCheckGuardRoutePath(configData.routingPath) || configData.routingPath === '') {
console.log('isCheckGuardRoutePath ', true);
return true;
}
else
return false;
}
else
return true;
}
else if (verifyToken['resultCode'] === '40100') {
/** @type {?} */
let __resultData = verifyToken['resultData'];
this.checkSession(__resultData.userMessage);
return false;
}
else {
return false;
}
});
}
/**
* @param {?} userMessage
* @return {?}
*/
checkSession(userMessage) {
console.log('checkSession');
/** @type {?} */
const token = sessionStorage.getItem('token');
window.parent.postMessage(JSON.stringify({
command: "checkSession",
message: token,
userMessage: userMessage || 'Unknow'
}), '*');
console.log('checkSession', JSON.stringify({
command: "checkSession",
message: token,
userMessage: userMessage || 'Unknow'
}));
}
/**
* @param {?} url
* @return {?}
*/
getUrlPath(url) {
console.log('path ', url.routeConfig.path);
return url.routeConfig.path;
}
/**
* @param {?} path
* @return {?}
*/
getConfigByUrl(path) {
/** @type {?} */
const permissionConfig = this.config.permission;
/** @type {?} */
let permissionData = null;
for (let data of permissionConfig) {
if (path == data.routingPath) {
permissionData = data;
break;
}
}
console.log('Data ', permissionData);
return permissionData;
}
}
PermissionGuard.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
/** @nocollapse */
PermissionGuard.ctorParameters = () => [
{ type: Router },
{ type: ActivatedRoute },
{ type: B2bService },
{ type: AppConfigService }
];
/** @nocollapse */ PermissionGuard.ngInjectableDef = i0.defineInjectable({ factory: function PermissionGuard_Factory() { return new PermissionGuard(i0.inject(i1.Router), i0.inject(i1.ActivatedRoute), i0.inject(i2.B2bService), i0.inject(i3.AppConfigService)); }, token: PermissionGuard, providedIn: "root" });
if (false) {
/** @type {?} */
PermissionGuard.prototype.config;
/** @type {?} */
PermissionGuard.prototype.router;
/** @type {?} */
PermissionGuard.prototype.route;
/** @type {?} */
PermissionGuard.prototype.dataservice;
/** @type {?} */
PermissionGuard.prototype.appConfigService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3NvYy1hcHAtbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi9fZ3VhcmQvcGVybWlzc2lvbi5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUNILE1BQU0sRUFFTixjQUFjLEVBR2pCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDBCQUEwQixDQUFDOzs7OztBQUlwRCxNQUFNOzs7Ozs7O0lBR0YsWUFBbUIsTUFBYyxFQUFVLEtBQXFCLEVBQVUsV0FBdUIsRUFBVSxnQkFBa0M7UUFBMUgsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFBVSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ3pJLElBQUksQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUM7S0FDOUM7Ozs7OztJQUVELFdBQVcsQ0FBQyxJQUE0QixFQUM1QixLQUEwQjtRQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzs7UUFDOUIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUM5QixJQUFJLE1BQU0sV0FBUTtZQUNkLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sVUFBTyxDQUFDOztZQUU5QyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkM7YUFBTSxJQUFJLE1BQU0sY0FBVyxFQUFFLEVBQUU7WUFDNUIsT0FBTyxLQUFLLENBQUM7U0FDaEI7YUFBTTs7WUFDSCxNQUFN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QUksQ0FBQyxXQUFXLEVBQUU7Z0JBQzFCLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQ3RCLE1BQU07YUFDVDtTQUNKO1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDckMsT0FBTyxjQUFjLENBQUM7S0FDekI7OztZQWxHSixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7Ozs7WUFYRyxNQUFNO1lBRU4sY0FBYztZQU1WLFVBQVU7WUFEVixnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBSb3V0ZXIsXG4gICAgQ2FuQWN0aXZhdGUsXG4gICAgQWN0aXZhdGVkUm91dGUsXG4gICAgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgICBSb3V0ZXJTdGF0ZVNuYXBzaG90XG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtBcHBDb25maWdTZXJ2aWNlfSBmcm9tICcuLi9hcHAtY29uZmlnL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQge0IyYlNlcnZpY2V9IGZyb20gJy4uL19zZXJ2aWNlcy9iMmIuc2VydmljZSc7XG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25HdWFyZCBpbXBsZW1lbnRzIENhbkFjdGl2YXRlIHtcbiAgICBjb25maWc6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsIHByaXZhdGUgZGF0YXNlcnZpY2U6IEIyYlNlcnZpY2UsIHByaXZhdGUgYXBwQ29uZmlnU2VydmljZTogQXBwQ29uZmlnU2VydmljZSkge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGFwcENvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XG4gICAgfVxuXG4gICAgY2FuQWN0aXZhdGUobmV4dDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgICAgICAgICAgICAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IGFueSB7XG4gICAgICAgIGNvbnNvbGUubG9nKG5leHQucXVlcnlQYXJhbXMpO1xuICAgICAgICBsZXQgcGFyYW1zID0gbmV4dC5xdWVyeVBhcmFtcztcbiAgICAgICAgaWYgKHBhcmFtcy50b2tlbikge1xuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndG9rZW4nLCBwYXJhbXMudG9rZW4pO1xuICAgICAgICAgICAgLy8gdG9rZW4gPSBwYXJhbXMudG9rZW5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFBlcm1pc3Npb24obmV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnRva2VuID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd0b2tlbicpO1xuICAgICAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGVybWlzc2lvbihuZXh0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnN0IHBhdGggPSB0aGlzLmdldFVybFBhdGgobmV4dCk7XG4gICAgICAgIC8vIGxldCBjb25maWdEYXRhID0gbnVsbDtcbiAgICAgICAgLy8gY29uZmlnRGF0YSA9IHRoaXMuZ2V0Q29uZmlnQnlVcmwocGF0aCk7XG4gICAgICAgIC8vIGlmIChjb25maWdEYXRhKSB7XG4gICAgICAgIC8vICAgICBpZiAodGhpcy5kYXRhc2VydmljZS5pc0NoZWNrR3VhcmQoY29uZmlnRGF0YS5yb2xlKSkge1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgICAgZWxzZSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgICAvLyB9IGVsc2UgeyByZXR1cm4gdHJ1ZTsgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldFBlcm1pc3Npb24obmV4dCkge1xuXG4gICAgICAgIGxldCB2ZXJpZnlUb2tlbiA9IGF3YWl0IHRoaXMuZGF0YXNlcnZpY2UudmVyaWZ5KCk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwidmVyaWZ5VG9rZW5cIix2ZXJpZnlUb2tlbiAsdmVyaWZ5VG9rZW5bJ3Jlc3VsdENvZGUnXSA9PT0gJzQwMTAwJyk7XG4gICAgICAgIGlmICh2ZXJpZnlUb2tlblsncmVzdWx0Q29kZSddID09ICcyMDAwMCcpIHtcbiAgICAgICAgICAgIC8vIHRoaXMuc3RvcmUudG9rZW4gPSB7dG9rZW46IHZlcmlmeVRva2VuWydyZXN1bHREYXRhJ119O1xuICAgICAgICAgICAgbGV0IHBhdGggPSB0aGlzLmdldFVybFBhdGgobmV4dCk7XG4gICAgICAgICAgICBsZXQgY29uZmlnRGF0YSA9IG51bGw7XG4gICAgICAgICAgICBjb25maWdEYXRhID0gdGhpcy5nZXRDb25maWdCeVVybChwYXRoKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjb25maWdEYXRhICcsIGNvbmZpZ0RhdGEpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ0RhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhc2VydmljZS5pc0NoZWNrR3VhcmRSb3V0ZVBhdGgoY29uZmlnRGF0YS5yb3V0aW5nUGF0aCkgfHwgY29uZmlnRGF0YS5yb3V0aW5nUGF0aCA9PT0gJycpe1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnaXNDaGVja0d1YXJkUm91dGVQYXRoICcsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgcmV0dXJuIHRydWU7XG4gICAgICAgIH1lbHNlIGlmKHZlcmlmeVRva2VuWydyZXN1bHRDb2RlJ10gPT09ICc0MDEwMCcpe1xuICAgICAgICAgIGxldCBfX3Jlc3VsdERhdGEgPSB2ZXJpZnlUb2tlblsncmVzdWx0RGF0YSddO1xuICAgICAgICAgIHRoaXMuY2hlY2tTZXNzaW9uKF9fcmVzdWx0RGF0YS51c2VyTWVzc2FnZSk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2V7XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGVja1Nlc3Npb24odXNlck1lc3NhZ2Upe1xuICAgICAgY29uc29sZS5sb2coJ2NoZWNrU2Vzc2lvbicpO1xuICAgICAgY29uc3QgdG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd0b2tlbicpO1xuICAgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgY29tbWFuZDpcImNoZWNrU2Vzc2lvblwiLFxuICAgICAgICAgIG1lc3NhZ2U6IHRva2VuLFxuICAgICAgICAgIHVzZXJNZXNzYWdlOiB1c2VyTWVzc2FnZSB8fCAnVW5rbm93J1xuICAgICAgfSksICcqJyk7XG4gICAgICBjb25zb2xlLmxvZygnY2hlY2tTZXNzaW9uJyxKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgY29tbWFuZDpcImNoZWNrU2Vzc2lvblwiLFxuICAgICAgICAgIG1lc3NhZ2U6IHRva2VuLFxuICAgICAgICAgIHVzZXJNZXNzYWdlOiB1c2VyTWVzc2FnZSB8fCAnVW5rbm93J1xuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGdldFVybFBhdGgodXJsKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdwYXRoICcsIHVybC5yb3V0ZUNvbmZpZy5wYXRoKTtcbiAgICAgICAgcmV0dXJuIHVybC5yb3V0ZUNvbmZpZy5wYXRoO1xuICAgIH1cblxuICAgIGdldENvbmZpZ0J5VXJsKHBhdGgpIHtcbiAgICAgICAgY29uc3QgcGVybWlzc2lvbkNvbmZpZyA9IHRoaXMuY29uZmlnLnBlcm1pc3Npb247XG4gICAgICAgIGxldCBwZXJtaXNzaW9uRGF0YSA9IG51bGw7XG4gICAgICAgIGZvcihsZXQgZGF0YSBvZiBwZXJtaXNzaW9uQ29uZmlnKXtcbiAgICAgICAgICAgIGlmIChwYXRoID09IGRhdGEucm91dGluZ1BhdGgpIHtcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uRGF0YSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJ0RhdGEgJywgcGVybWlzc2lvbkRhdGEpO1xuICAgICAgICByZXR1cm4gcGVybWlzc2lvbkRhdGE7XG4gICAgfVxuXG5cbn1cbiJdfQ==