UNPKG

4.43 kBJavaScriptView Raw
1"use strict";
2var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6 return c > 3 && r && Object.defineProperty(target, key, r), r;
7};
8var __metadata = (this && this.__metadata) || function (k, v) {
9 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10};
11var __param = (this && this.__param) || function (paramIndex, decorator) {
12 return function (target, key) { decorator(target, key, paramIndex); }
13};
14var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15 return new (P || (P = Promise))(function (resolve, reject) {
16 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18 function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
19 step((generator = generator.apply(thisArg, _arguments || [])).next());
20 });
21};
22Object.defineProperty(exports, "__esModule", { value: true });
23const common_1 = require("@nestjs/common");
24const permission_controller_1 = require("../decorator/permission.controller");
25const user_component_provider_1 = require("../export/user.component.provider");
26exports.MODULE_TOKEN = "module_token";
27let PermissionGuard = class PermissionGuard {
28 constructor(userComponent) {
29 this.userComponent = userComponent;
30 }
31 canActivate(req, context) {
32 return __awaiter(this, void 0, void 0, function* () {
33 const { parent, handler } = context;
34 const auth = req.headers.authentication;
35 const user = { id: 1, recycle: false, status: true };
36 let permissions;
37 if (user) {
38 permissions = yield this.userComponent.permissions(user.id);
39 if (user.recycle) {
40 return false;
41 }
42 if (!user.status) {
43 permissions = [];
44 }
45 }
46 else {
47 permissions = [];
48 }
49 const classOr = Reflect.getMetadata(permission_controller_1.PERMISSION_CONTROLLER_OR, parent) || [];
50 const classAnd = Reflect.getMetadata(permission_controller_1.PERMISSION_CONTROLLER_AND, parent) || [];
51 const token = Reflect.getMetadata(exports.MODULE_TOKEN, parent);
52 const classPass = this.checkPermission(permissions, classAnd, classOr, token);
53 if (!classPass)
54 return false;
55 const methodOr = Reflect.getMetadata(permission_controller_1.PERMISSION_CONTROLLER_OR, handler) || [];
56 const methodAnd = Reflect.getMetadata(permission_controller_1.PERMISSION_CONTROLLER_AND, handler) || [];
57 const methodPass = this.checkPermission(permissions, methodAnd, methodOr, token);
58 return methodPass;
59 });
60 }
61 checkPermission(permissions, and, or, token) {
62 for (let i = 0; i < and.length; i++) {
63 const name = and[i];
64 const find = permissions.find(per => {
65 return per.name === name && per.moduleToken === token;
66 });
67 if (!find) {
68 return false;
69 }
70 }
71 for (let i = 0; i < or.length; i++) {
72 const name = or[i];
73 const find = permissions.find(per => {
74 return per.name === name && per.moduleToken === token;
75 });
76 if (find) {
77 break;
78 }
79 if (i === or.length - 1) {
80 return false;
81 }
82 }
83 return true;
84 }
85};
86PermissionGuard = __decorate([
87 common_1.Guard(),
88 __param(0, common_1.Inject("UserComponentToken")),
89 __metadata("design:paramtypes", [user_component_provider_1.UserComponent])
90], PermissionGuard);
91exports.PermissionGuard = PermissionGuard;