permission.guard.js
16.2 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
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
/**
* @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";
var PermissionGuard = /** @class */ (function () {
function PermissionGuard(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 {?}
*/
PermissionGuard.prototype.canActivate = /**
* @param {?} next
* @param {?} state
* @return {?}
*/
function (next, state) {
console.log(next.queryParams);
/** @type {?} */
var 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 {?} */
var 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 {?}
*/
PermissionGuard.prototype.getPermission = /**
* @param {?} next
* @return {?}
*/
function (next) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var verifyToken, path, configData, __resultData;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.dataservice.verify()];
case 1:
verifyToken = _a.sent();
console.log("verifyToken", verifyToken, verifyToken['resultCode'] === '40100');
if (verifyToken['resultCode'] == '20000') {
path = this.getUrlPath(next);
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 [2 /*return*/, true];
}
else
return [2 /*return*/, false];
}
else
return [2 /*return*/, true];
}
else if (verifyToken['resultCode'] === '40100') {
__resultData = verifyToken['resultData'];
this.checkSession(__resultData.userMessage);
return [2 /*return*/, false];
}
else {
return [2 /*return*/, false];
}
return [2 /*return*/];
}
});
});
};
/**
* @param {?} userMessage
* @return {?}
*/
PermissionGuard.prototype.checkSession = /**
* @param {?} userMessage
* @return {?}
*/
function (userMessage) {
console.log('checkSession');
/** @type {?} */
var 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 {?}
*/
PermissionGuard.prototype.getUrlPath = /**
* @param {?} url
* @return {?}
*/
function (url) {
console.log('path ', url.routeConfig.path);
return url.routeConfig.path;
};
/**
* @param {?} path
* @return {?}
*/
PermissionGuard.prototype.getConfigByUrl = /**
* @param {?} path
* @return {?}
*/
function (path) {
var e_1, _a;
/** @type {?} */
var permissionConfig = this.config.permission;
/** @type {?} */
var permissionData = null;
try {
for (var permissionConfig_1 = tslib_1.__values(permissionConfig), permissionConfig_1_1 = permissionConfig_1.next(); !permissionConfig_1_1.done; permissionConfig_1_1 = permissionConfig_1.next()) {
var data = permissionConfig_1_1.value;
if (path == data.routingPath) {
permissionData = data;
break;
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (permissionConfig_1_1 && !permissionConfig_1_1.done && (_a = permissionConfig_1.return)) _a.call(permissionConfig_1);
}
finally { if (e_1) throw e_1.error; }
}
console.log('Data ', permissionData);
return permissionData;
};
PermissionGuard.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
/** @nocollapse */
PermissionGuard.ctorParameters = function () { return [
{ 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" });
return PermissionGuard;
}());
export { PermissionGuard };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3NvYy1hcHAtbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi9fZ3VhcmQvcGVybWlzc2lvbi5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUNILE1BQU0sRUFFTixjQUFjLEVBR2pCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7SUFPaEQseUJBQW1CLE1BQWMsRUFBVSxLQUFxQixFQUFVLFdBQXVCLEVBQVUsZ0JBQWtDO1FBQTFILFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQVUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUN6SSxJQUFJLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDO0tBQzlDOzs7Ozs7SUFFRCxxQ0FBVzs7Ozs7SUFBWCxVQUFZLElBQTRCLEVBQzVCLEtBQTBCO1FBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDOztRQUM5QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzlCLElBQUksTUFBTSxXQUFRO1lBQ2QsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxVQUFPLENBQUM7O1lBRTlDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQzthQUFNLElBQUksTUFBTSxjQUFXLEVBQUUsRUFBRTtZQUM1QixPQUFPLEtBQUssQ0FBQztTQUNoQjthQUFNOztZQUNILElBQU0sS0FB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QkFBQSxpQkFBQSxnQkFBZ0IsQ0FBQSxrREFBQSxnRkFBQztnQkFBN0IsSUFBSSxJQUFJLDZCQUFBO2dCQUNSLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7b0JBQzFCLGNBQWMsR0FBRyxJQUFJLENBQUM7b0JBQ3RCLE1BQU07aUJBQ1Q7YUFDSjs7Ozs7Ozs7O1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDckMsT0FBTyxjQUFjLENBQUM7S0FDekI7O2dCQWxHSixVQUFVLFNBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzs7O2dCQVhHLE1BQU07Z0JBRU4sY0FBYztnQkFNVixVQUFVO2dCQURWLGdCQUFnQjs7OzBCQVR4Qjs7U0FjYSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgUm91dGVyLFxuICAgIENhbkFjdGl2YXRlLFxuICAgIEFjdGl2YXRlZFJvdXRlLFxuICAgIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gICAgUm91dGVyU3RhdGVTbmFwc2hvdFxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7QXBwQ29uZmlnU2VydmljZX0gZnJvbSAnLi4vYXBwLWNvbmZpZy9hcHAtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHtCMmJTZXJ2aWNlfSBmcm9tICcuLi9fc2VydmljZXMvYjJiLnNlcnZpY2UnO1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uR3VhcmQgaW1wbGVtZW50cyBDYW5BY3RpdmF0ZSB7XG4gICAgY29uZmlnOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIGRhdGFzZXJ2aWNlOiBCMmJTZXJ2aWNlLCBwcml2YXRlIGFwcENvbmZpZ1NlcnZpY2U6IEFwcENvbmZpZ1NlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5jb25maWcgPSBhcHBDb25maWdTZXJ2aWNlLmdldENvbmZpZygpO1xuICAgIH1cblxuICAgIGNhbkFjdGl2YXRlKG5leHQ6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gICAgICAgICAgICAgICAgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBhbnkge1xuICAgICAgICBjb25zb2xlLmxvZyhuZXh0LnF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgbGV0IHBhcmFtcyA9IG5leHQucXVlcnlQYXJhbXM7XG4gICAgICAgIGlmIChwYXJhbXMudG9rZW4pIHtcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3Rva2VuJywgcGFyYW1zLnRva2VuKTtcbiAgICAgICAgICAgIC8vIHRva2VuID0gcGFyYW1zLnRva2VuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQZXJtaXNzaW9uKG5leHQpO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtcy50b2tlbiA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndG9rZW4nKTtcbiAgICAgICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFBlcm1pc3Npb24obmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zdCBwYXRoID0gdGhpcy5nZXRVcmxQYXRoKG5leHQpO1xuICAgICAgICAvLyBsZXQgY29uZmlnRGF0YSA9IG51bGw7XG4gICAgICAgIC8vIGNvbmZpZ0RhdGEgPSB0aGlzLmdldENvbmZpZ0J5VXJsKHBhdGgpO1xuICAgICAgICAvLyBpZiAoY29uZmlnRGF0YSkge1xuICAgICAgICAvLyAgICAgaWYgKHRoaXMuZGF0YXNlcnZpY2UuaXNDaGVja0d1YXJkKGNvbmZpZ0RhdGEucm9sZSkpIHtcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICAgIGVsc2UgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgLy8gfSBlbHNlIHsgcmV0dXJuIHRydWU7IH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRQZXJtaXNzaW9uKG5leHQpIHtcblxuICAgICAgICBsZXQgdmVyaWZ5VG9rZW4gPSBhd2FpdCB0aGlzLmRhdGFzZXJ2aWNlLnZlcmlmeSgpO1xuICAgICAgICBjb25zb2xlLmxvZyhcInZlcmlmeVRva2VuXCIsdmVyaWZ5VG9rZW4gLHZlcmlmeVRva2VuWydyZXN1bHRDb2RlJ10gPT09ICc0MDEwMCcpO1xuICAgICAgICBpZiAodmVyaWZ5VG9rZW5bJ3Jlc3VsdENvZGUnXSA9PSAnMjAwMDAnKSB7XG4gICAgICAgICAgICAvLyB0aGlzLnN0b3JlLnRva2VuID0ge3Rva2VuOiB2ZXJpZnlUb2tlblsncmVzdWx0RGF0YSddfTtcbiAgICAgICAgICAgIGxldCBwYXRoID0gdGhpcy5nZXRVcmxQYXRoKG5leHQpO1xuICAgICAgICAgICAgbGV0IGNvbmZpZ0RhdGEgPSBudWxsO1xuICAgICAgICAgICAgY29uZmlnRGF0YSA9IHRoaXMuZ2V0Q29uZmlnQnlVcmwocGF0aCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY29uZmlnRGF0YSAnLCBjb25maWdEYXRhKTtcbiAgICAgICAgICAgIGlmIChjb25maWdEYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YXNlcnZpY2UuaXNDaGVja0d1YXJkUm91dGVQYXRoKGNvbmZpZ0RhdGEucm91dGluZ1BhdGgpIHx8IGNvbmZpZ0RhdGEucm91dGluZ1BhdGggPT09ICcnKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2lzQ2hlY2tHdWFyZFJvdXRlUGF0aCAnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHJldHVybiB0cnVlO1xuICAgICAgICB9ZWxzZSBpZih2ZXJpZnlUb2tlblsncmVzdWx0Q29kZSddID09PSAnNDAxMDAnKXtcbiAgICAgICAgICBsZXQgX19yZXN1bHREYXRhID0gdmVyaWZ5VG9rZW5bJ3Jlc3VsdERhdGEnXTtcbiAgICAgICAgICB0aGlzLmNoZWNrU2Vzc2lvbihfX3Jlc3VsdERhdGEudXNlck1lc3NhZ2UpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2hlY2tTZXNzaW9uKHVzZXJNZXNzYWdlKXtcbiAgICAgIGNvbnNvbGUubG9nKCdjaGVja1Nlc3Npb24nKTtcbiAgICAgIGNvbnN0IHRva2VuID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndG9rZW4nKTtcbiAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGNvbW1hbmQ6XCJjaGVja1Nlc3Npb25cIixcbiAgICAgICAgICBtZXNzYWdlOiB0b2tlbixcbiAgICAgICAgICB1c2VyTWVzc2FnZTogdXNlck1lc3NhZ2UgfHwgJ1Vua25vdydcbiAgICAgIH0pLCAnKicpO1xuICAgICAgY29uc29sZS5sb2coJ2NoZWNrU2Vzc2lvbicsSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGNvbW1hbmQ6XCJjaGVja1Nlc3Npb25cIixcbiAgICAgICAgICBtZXNzYWdlOiB0b2tlbixcbiAgICAgICAgICB1c2VyTWVzc2FnZTogdXNlck1lc3NhZ2UgfHwgJ1Vua25vdydcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBnZXRVcmxQYXRoKHVybCkge1xuICAgICAgICBjb25zb2xlLmxvZygncGF0aCAnLCB1cmwucm91dGVDb25maWcucGF0aCk7XG4gICAgICAgIHJldHVybiB1cmwucm91dGVDb25maWcucGF0aDtcbiAgICB9XG5cbiAgICBnZXRDb25maWdCeVVybChwYXRoKSB7XG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb25Db25maWcgPSB0aGlzLmNvbmZpZy5wZXJtaXNzaW9uO1xuICAgICAgICBsZXQgcGVybWlzc2lvbkRhdGEgPSBudWxsO1xuICAgICAgICBmb3IobGV0IGRhdGEgb2YgcGVybWlzc2lvbkNvbmZpZyl7XG4gICAgICAgICAgICBpZiAocGF0aCA9PSBkYXRhLnJvdXRpbmdQYXRoKSB7XG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbkRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKCdEYXRhICcsIHBlcm1pc3Npb25EYXRhKTtcbiAgICAgICAgcmV0dXJuIHBlcm1pc3Npb25EYXRhO1xuICAgIH1cblxuXG59XG4iXX0=