@evara-group/guard 1.0.30
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/README.md +46 -0
- package/dist/core/enums/locale.d.ts +4 -0
- package/dist/core/enums/locale.js +9 -0
- package/dist/core/enums/locale.js.map +1 -0
- package/dist/core/enums/user-role.d.ts +4 -0
- package/dist/core/enums/user-role.js +9 -0
- package/dist/core/enums/user-role.js.map +1 -0
- package/dist/core/utils/base.dto.d.ts +9 -0
- package/dist/core/utils/base.dto.js +7 -0
- package/dist/core/utils/base.dto.js.map +1 -0
- package/dist/core/utils/base.entity.d.ts +9 -0
- package/dist/core/utils/base.entity.js +45 -0
- package/dist/core/utils/base.entity.js.map +1 -0
- package/dist/core/utils/header-util.d.ts +4 -0
- package/dist/core/utils/header-util.js +12 -0
- package/dist/core/utils/header-util.js.map +1 -0
- package/dist/core/utils/paginate.dto.d.ts +6 -0
- package/dist/core/utils/paginate.dto.js +64 -0
- package/dist/core/utils/paginate.dto.js.map +1 -0
- package/dist/core/utils/pagination.entity.d.ts +19 -0
- package/dist/core/utils/pagination.entity.js +63 -0
- package/dist/core/utils/pagination.entity.js.map +1 -0
- package/dist/core/utils/password-util.d.ts +3 -0
- package/dist/core/utils/password-util.js +44 -0
- package/dist/core/utils/password-util.js.map +1 -0
- package/dist/core/utils/request.d.ts +7 -0
- package/dist/core/utils/request.js +3 -0
- package/dist/core/utils/request.js.map +1 -0
- package/dist/core/utils/response-message.dto.d.ts +3 -0
- package/dist/core/utils/response-message.dto.js +7 -0
- package/dist/core/utils/response-message.dto.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/security/decorators/auth-user.decorator.d.ts +1 -0
- package/dist/security/decorators/auth-user.decorator.js +9 -0
- package/dist/security/decorators/auth-user.decorator.js.map +1 -0
- package/dist/security/decorators/roles.decorator.d.ts +1 -0
- package/dist/security/decorators/roles.decorator.js +7 -0
- package/dist/security/decorators/roles.decorator.js.map +1 -0
- package/dist/security/guards/jwt-auth.guard.d.ts +4 -0
- package/dist/security/guards/jwt-auth.guard.js +18 -0
- package/dist/security/guards/jwt-auth.guard.js.map +1 -0
- package/dist/security/guards/roles.guard.d.ts +7 -0
- package/dist/security/guards/roles.guard.js +35 -0
- package/dist/security/guards/roles.guard.js.map +1 -0
- package/dist/security/security.module.d.ts +7 -0
- package/dist/security/security.module.js +43 -0
- package/dist/security/security.module.js.map +1 -0
- package/dist/security/security.service.d.ts +7 -0
- package/dist/security/security.service.js +31 -0
- package/dist/security/security.service.js.map +1 -0
- package/dist/security/strategies/jwt.strategy.d.ts +9 -0
- package/dist/security/strategies/jwt.strategy.js +38 -0
- package/dist/security/strategies/jwt.strategy.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/user/dtos/create-user.dto.d.ts +5 -0
- package/dist/user/dtos/create-user.dto.js +7 -0
- package/dist/user/dtos/create-user.dto.js.map +1 -0
- package/dist/user/dtos/update-user.dto.d.ts +5 -0
- package/dist/user/dtos/update-user.dto.js +9 -0
- package/dist/user/dtos/update-user.dto.js.map +1 -0
- package/dist/user/dtos/user-query.dto.d.ts +3 -0
- package/dist/user/dtos/user-query.dto.js +8 -0
- package/dist/user/dtos/user-query.dto.js.map +1 -0
- package/dist/user/dtos/user.dto.d.ts +11 -0
- package/dist/user/dtos/user.dto.js +81 -0
- package/dist/user/dtos/user.dto.js.map +1 -0
- package/dist/user/user.controller.d.ts +16 -0
- package/dist/user/user.controller.js +161 -0
- package/dist/user/user.controller.js.map +1 -0
- package/dist/user/user.entity.d.ts +11 -0
- package/dist/user/user.entity.js +52 -0
- package/dist/user/user.entity.js.map +1 -0
- package/dist/user/user.mapper.d.ts +6 -0
- package/dist/user/user.mapper.js +32 -0
- package/dist/user/user.mapper.js.map +1 -0
- package/dist/user/user.module.d.ts +4 -0
- package/dist/user/user.module.js +31 -0
- package/dist/user/user.module.js.map +1 -0
- package/dist/user/user.service.d.ts +15 -0
- package/dist/user/user.service.js +79 -0
- package/dist/user/user.service.js.map +1 -0
- package/package.json +43 -0
package/README.md
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# NestJS Authorization Guards (Roles + Permissions)
|
|
2
|
+
|
|
3
|
+
A reusable and extensible **role + permission-based access control** system for NestJS applications.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 🚀 Features
|
|
8
|
+
|
|
9
|
+
- ✅ Role-based access control (`UserRole`)
|
|
10
|
+
- ✅ Permission-based access control (`Permission`)
|
|
11
|
+
- ✅ Unified `@Roles()` decorator to handle both
|
|
12
|
+
- ✅ Built-in `AuthUser` decorator for easy access to authenticated user
|
|
13
|
+
- ✅ JWT-compatible `AuthGuard` via Passport strategy
|
|
14
|
+
- ✅ Plug-and-play with DTOs and enums
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 📦 Files Overview
|
|
19
|
+
|
|
20
|
+
| File | Purpose |
|
|
21
|
+
|-------------------------------|-----------------------------------------|
|
|
22
|
+
| `roles.guard.ts` | Guard that checks roles & permissions |
|
|
23
|
+
| `roles.decorator.ts` | `@Roles()` decorator |
|
|
24
|
+
| `auth.guard.ts` | JWT-based authentication guard |
|
|
25
|
+
| `auth-user.decorator.ts` | Custom param decorator for user access |
|
|
26
|
+
| `user-role.enum.ts` | Enum defining system roles |
|
|
27
|
+
| `permission.enum.ts` | Enum defining permission constants |
|
|
28
|
+
| `user.dto.ts` | DTO representing user payload structure |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 🧑🏫 How It Works
|
|
33
|
+
|
|
34
|
+
### ✅ Roles + Permissions Enum
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
export enum UserRole {
|
|
38
|
+
Admin = 'admin',
|
|
39
|
+
Manager = 'manager',
|
|
40
|
+
User = 'user',
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export enum Permission {
|
|
44
|
+
ReadScenarios = 'scenarios:read',
|
|
45
|
+
EditScenarios = 'scenarios:edit',
|
|
46
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Locale = void 0;
|
|
4
|
+
var Locale;
|
|
5
|
+
(function (Locale) {
|
|
6
|
+
Locale["EN"] = "en";
|
|
7
|
+
Locale["AR"] = "ar";
|
|
8
|
+
})(Locale || (exports.Locale = Locale = {}));
|
|
9
|
+
//# sourceMappingURL=locale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale.js","sourceRoot":"","sources":["../../../src/core/enums/locale.ts"],"names":[],"mappings":";;;AAAA,IAAY,MAGX;AAHD,WAAY,MAAM;IAChB,mBAAS,CAAA;IACT,mBAAS,CAAA;AACX,CAAC,EAHW,MAAM,sBAAN,MAAM,QAGjB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UserRole = void 0;
|
|
4
|
+
var UserRole;
|
|
5
|
+
(function (UserRole) {
|
|
6
|
+
UserRole["ADMIN"] = "ADMIN";
|
|
7
|
+
UserRole["USER"] = "USER";
|
|
8
|
+
})(UserRole || (exports.UserRole = UserRole = {}));
|
|
9
|
+
//# sourceMappingURL=user-role.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-role.js","sourceRoot":"","sources":["../../../src/core/enums/user-role.ts"],"names":[],"mappings":";;;AAAA,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,2BAAe,CAAA;IACf,yBAAa,CAAA;AACf,CAAC,EAHW,QAAQ,wBAAR,QAAQ,QAGnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.dto.js","sourceRoot":"","sources":["../../../src/core/utils/base.dto.ts"],"names":[],"mappings":";;;AAGA,MAAa,OAAO;CAQnB;AARD,0BAQC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __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
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.BaseEntity = void 0;
|
|
13
|
+
const typeorm_1 = require("typeorm");
|
|
14
|
+
class BaseEntity {
|
|
15
|
+
}
|
|
16
|
+
exports.BaseEntity = BaseEntity;
|
|
17
|
+
__decorate([
|
|
18
|
+
(0, typeorm_1.PrimaryGeneratedColumn)(),
|
|
19
|
+
__metadata("design:type", Number)
|
|
20
|
+
], BaseEntity.prototype, "id", void 0);
|
|
21
|
+
__decorate([
|
|
22
|
+
(0, typeorm_1.Column)({ name: "created_by", nullable: true }),
|
|
23
|
+
__metadata("design:type", String)
|
|
24
|
+
], BaseEntity.prototype, "createdBy", void 0);
|
|
25
|
+
__decorate([
|
|
26
|
+
(0, typeorm_1.CreateDateColumn)({ name: "created_at", type: "timestamptz" }),
|
|
27
|
+
__metadata("design:type", Date)
|
|
28
|
+
], BaseEntity.prototype, "createdAt", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
(0, typeorm_1.Column)({ name: "updated_by", nullable: true }),
|
|
31
|
+
__metadata("design:type", String)
|
|
32
|
+
], BaseEntity.prototype, "updatedBy", void 0);
|
|
33
|
+
__decorate([
|
|
34
|
+
(0, typeorm_1.UpdateDateColumn)({ name: "updated_at", type: "timestamptz" }),
|
|
35
|
+
__metadata("design:type", Date)
|
|
36
|
+
], BaseEntity.prototype, "updatedAt", void 0);
|
|
37
|
+
__decorate([
|
|
38
|
+
(0, typeorm_1.Column)({ name: "deleted_by", nullable: true }),
|
|
39
|
+
__metadata("design:type", String)
|
|
40
|
+
], BaseEntity.prototype, "deletedBy", void 0);
|
|
41
|
+
__decorate([
|
|
42
|
+
(0, typeorm_1.DeleteDateColumn)({ name: "deleted_at", type: "timestamptz", nullable: true }),
|
|
43
|
+
__metadata("design:type", Date)
|
|
44
|
+
], BaseEntity.prototype, "deletedAt", void 0);
|
|
45
|
+
//# sourceMappingURL=base.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.entity.js","sourceRoot":"","sources":["../../../src/core/utils/base.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAMiB;AAEjB,MAAsB,UAAU;CAqB/B;AArBD,gCAqBC;AAnBC;IADC,IAAA,gCAAsB,GAAE;;sCACb;AAGZ;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CAC5B;AAGnB;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;8BAClD,IAAI;6CAAC;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CAC5B;AAGnB;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;8BAClD,IAAI;6CAAC;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CAC5B;AAGnB;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BAClE,IAAI;6CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HeaderUtil = void 0;
|
|
4
|
+
class HeaderUtil {
|
|
5
|
+
static addPaginationHeaders(res, total, currentPage, nextPage) {
|
|
6
|
+
res.set('X-Total-Count', total.toString());
|
|
7
|
+
res.set('Current-Page', currentPage.toString());
|
|
8
|
+
res.set('Has-Next-Page', nextPage.toString());
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.HeaderUtil = HeaderUtil;
|
|
12
|
+
//# sourceMappingURL=header-util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-util.js","sourceRoot":"","sources":["../../../src/core/utils/header-util.ts"],"names":[],"mappings":";;;AAEA,MAAa,UAAU;IACrB,MAAM,CAAC,oBAAoB,CACzB,GAAa,EACb,KAAa,EACb,WAAmB,EACnB,QAAiB;QAEjB,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3C,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChD,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChD,CAAC;CACF;AAXD,gCAWC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __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
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.PaginateDTO = void 0;
|
|
13
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
const class_transformer_1 = require("class-transformer");
|
|
16
|
+
class PaginateDTO {
|
|
17
|
+
constructor() {
|
|
18
|
+
this.page = 1;
|
|
19
|
+
this.pageSize = 10;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.PaginateDTO = PaginateDTO;
|
|
23
|
+
__decorate([
|
|
24
|
+
(0, swagger_1.ApiProperty)({
|
|
25
|
+
required: false,
|
|
26
|
+
description: 'Page number',
|
|
27
|
+
default: 1,
|
|
28
|
+
}),
|
|
29
|
+
(0, class_validator_1.IsOptional)(),
|
|
30
|
+
(0, class_transformer_1.Type)(() => Number),
|
|
31
|
+
(0, class_validator_1.IsNumber)(),
|
|
32
|
+
__metadata("design:type", Number)
|
|
33
|
+
], PaginateDTO.prototype, "page", void 0);
|
|
34
|
+
__decorate([
|
|
35
|
+
(0, swagger_1.ApiProperty)({
|
|
36
|
+
required: false,
|
|
37
|
+
description: 'Number of items per page',
|
|
38
|
+
default: 10,
|
|
39
|
+
}),
|
|
40
|
+
(0, class_validator_1.IsOptional)(),
|
|
41
|
+
(0, class_transformer_1.Type)(() => Number),
|
|
42
|
+
(0, class_validator_1.IsNumber)(),
|
|
43
|
+
__metadata("design:type", Number)
|
|
44
|
+
], PaginateDTO.prototype, "pageSize", void 0);
|
|
45
|
+
__decorate([
|
|
46
|
+
(0, swagger_1.ApiProperty)({
|
|
47
|
+
required: false,
|
|
48
|
+
description: 'Field to sort by',
|
|
49
|
+
}),
|
|
50
|
+
(0, class_validator_1.IsOptional)(),
|
|
51
|
+
(0, class_validator_1.IsString)(),
|
|
52
|
+
__metadata("design:type", String)
|
|
53
|
+
], PaginateDTO.prototype, "sortField", void 0);
|
|
54
|
+
__decorate([
|
|
55
|
+
(0, swagger_1.ApiProperty)({
|
|
56
|
+
required: false,
|
|
57
|
+
description: 'Sort order (ASC or DESC)',
|
|
58
|
+
enum: ['ASC', 'DESC'],
|
|
59
|
+
}),
|
|
60
|
+
(0, class_validator_1.IsOptional)(),
|
|
61
|
+
(0, class_validator_1.IsEnum)(['ASC', 'DESC']),
|
|
62
|
+
__metadata("design:type", String)
|
|
63
|
+
], PaginateDTO.prototype, "sortOrder", void 0);
|
|
64
|
+
//# sourceMappingURL=paginate.dto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paginate.dto.js","sourceRoot":"","sources":["../../../src/core/utils/paginate.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAC9C,qDAAyE;AACzE,yDAAyC;AAEzC,MAAa,WAAW;IAAxB;QASE,SAAI,GAAY,CAAC,CAAC;QAUlB,aAAQ,GAAY,EAAE,CAAC;IAkBzB,CAAC;CAAA;AArCD,kCAqCC;AA5BC;IARC,IAAA,qBAAW,EAAC;QACX,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,aAAa;QAC1B,OAAO,EAAE,CAAC;KACX,CAAC;IACD,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;IAClB,IAAA,0BAAQ,GAAE;;yCACO;AAUlB;IARC,IAAA,qBAAW,EAAC;QACX,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,0BAA0B;QACvC,OAAO,EAAE,EAAE;KACZ,CAAC;IACD,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;IAClB,IAAA,0BAAQ,GAAE;;6CACY;AAQvB;IANC,IAAA,qBAAW,EAAC;QACX,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,kBAAkB;KAChC,CAAC;IACD,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;8CACQ;AASnB;IAPC,IAAA,qBAAW,EAAC;QACX,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,0BAA0B;QACvC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;KACtB,CAAC;IACD,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAM,EAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;;8CACG"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { BaseEntity } from "./base.entity";
|
|
2
|
+
export declare class Sort {
|
|
3
|
+
property: string;
|
|
4
|
+
direction: "ASC" | "DESC";
|
|
5
|
+
constructor(sort: string);
|
|
6
|
+
asOrder(): Record<string, "ASC" | "DESC">;
|
|
7
|
+
}
|
|
8
|
+
export declare class PageRequest {
|
|
9
|
+
page: number;
|
|
10
|
+
size: number;
|
|
11
|
+
sort: Sort;
|
|
12
|
+
constructor(page: number | string, size: number | string, sort: string);
|
|
13
|
+
}
|
|
14
|
+
export declare class Page<T extends BaseEntity> {
|
|
15
|
+
content: T[];
|
|
16
|
+
total: number;
|
|
17
|
+
pageable: PageRequest;
|
|
18
|
+
constructor(content: T[], total: number, pageable: PageRequest);
|
|
19
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __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
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.Page = exports.PageRequest = exports.Sort = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
class Sort {
|
|
15
|
+
constructor(sort) {
|
|
16
|
+
this.property = "id";
|
|
17
|
+
this.direction = "ASC";
|
|
18
|
+
if (sort) {
|
|
19
|
+
const [property, direction] = sort.split(",");
|
|
20
|
+
this.property = property;
|
|
21
|
+
const upperDirection = direction?.toUpperCase();
|
|
22
|
+
this.direction = upperDirection === "DESC" ? "DESC" : "ASC";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
asOrder() {
|
|
26
|
+
const order = {};
|
|
27
|
+
order[this.property] = this.direction;
|
|
28
|
+
return order;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.Sort = Sort;
|
|
32
|
+
class PageRequest {
|
|
33
|
+
constructor(page, size, sort) {
|
|
34
|
+
this.page = 0;
|
|
35
|
+
this.size = 20;
|
|
36
|
+
this.sort = new Sort("id,ASC");
|
|
37
|
+
this.page = +page - 1 || this.page;
|
|
38
|
+
this.size = +size || this.size;
|
|
39
|
+
this.sort = sort ? new Sort(sort) : this.sort;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.PageRequest = PageRequest;
|
|
43
|
+
__decorate([
|
|
44
|
+
(0, class_transformer_1.Expose)(),
|
|
45
|
+
__metadata("design:type", Object)
|
|
46
|
+
], PageRequest.prototype, "page", void 0);
|
|
47
|
+
__decorate([
|
|
48
|
+
(0, class_transformer_1.Expose)(),
|
|
49
|
+
__metadata("design:type", Object)
|
|
50
|
+
], PageRequest.prototype, "size", void 0);
|
|
51
|
+
__decorate([
|
|
52
|
+
(0, class_transformer_1.Type)(() => Sort),
|
|
53
|
+
__metadata("design:type", Sort)
|
|
54
|
+
], PageRequest.prototype, "sort", void 0);
|
|
55
|
+
class Page {
|
|
56
|
+
constructor(content, total, pageable) {
|
|
57
|
+
this.content = content;
|
|
58
|
+
this.total = total;
|
|
59
|
+
this.pageable = pageable;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.Page = Page;
|
|
63
|
+
//# sourceMappingURL=pagination.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.entity.js","sourceRoot":"","sources":["../../../src/core/utils/pagination.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,yDAAiE;AAEjE,MAAa,IAAI;IAGf,YAAY,IAAY;QAFjB,aAAQ,GAAW,IAAI,CAAC;QACxB,cAAS,GAAmB,KAAK,CAAC;QAEvC,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAEzB,MAAM,cAAc,GAAG,SAAS,EAAE,WAAW,EAAE,CAAC;YAChD,IAAI,CAAC,SAAS,GAAG,cAAc,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,OAAO;QAEL,MAAM,KAAK,GAAmC,EAAE,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAnBD,oBAmBC;AAED,MAAa,WAAW;IAQtB,YAAY,IAAqB,EAAE,IAAqB,EAAE,IAAY;QANtE,SAAI,GAAG,CAAC,CAAC;QAET,SAAI,GAAG,EAAE,CAAC;QAEV,SAAI,GAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;QAG9B,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAChD,CAAC;CACF;AAbD,kCAaC;AAXC;IADC,IAAA,0BAAY,GAAE;;yCACN;AAET;IADC,IAAA,0BAAY,GAAE;;yCACL;AAEV;IADC,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC;8BACX,IAAI;yCAAsB;AASlC,MAAa,IAAI;IACf,YACS,OAAY,EACZ,KAAa,EACb,QAAqB;QAFrB,YAAO,GAAP,OAAO,CAAK;QACZ,UAAK,GAAL,KAAK,CAAQ;QACb,aAAQ,GAAR,QAAQ,CAAa;IAC3B,CAAC;CACL;AAND,oBAMC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.transformPassword = transformPassword;
|
|
37
|
+
const bcrypt = __importStar(require("bcrypt"));
|
|
38
|
+
async function transformPassword(user) {
|
|
39
|
+
if (user.password) {
|
|
40
|
+
user.password = await bcrypt.hash(user.password, 10);
|
|
41
|
+
}
|
|
42
|
+
return Promise.resolve();
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=password-util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-util.js","sourceRoot":"","sources":["../../../src/core/utils/password-util.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,8CAOC;AATD,+CAAiC;AAE1B,KAAK,UAAU,iBAAiB,CAAC,IAEvC;IACC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/core/utils/request.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-message.dto.js","sourceRoot":"","sources":["../../../src/core/utils/response-message.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,kBAAkB;CAE9B;AAFD,gDAEC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./security/security.module";
|
|
2
|
+
export * from "./security/security.service";
|
|
3
|
+
export * from "./security/guards/jwt-auth.guard";
|
|
4
|
+
export * from "./security/guards/roles.guard";
|
|
5
|
+
export * from "./security/decorators/auth-user.decorator";
|
|
6
|
+
export * from "./security/decorators/roles.decorator";
|
|
7
|
+
export * from "./user/user.module";
|
|
8
|
+
export * from "./user/user.service";
|
|
9
|
+
export * from "./user/user.entity";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./security/security.module"), exports);
|
|
18
|
+
__exportStar(require("./security/security.service"), exports);
|
|
19
|
+
__exportStar(require("./security/guards/jwt-auth.guard"), exports);
|
|
20
|
+
__exportStar(require("./security/guards/roles.guard"), exports);
|
|
21
|
+
__exportStar(require("./security/decorators/auth-user.decorator"), exports);
|
|
22
|
+
__exportStar(require("./security/decorators/roles.decorator"), exports);
|
|
23
|
+
__exportStar(require("./user/user.module"), exports);
|
|
24
|
+
__exportStar(require("./user/user.service"), exports);
|
|
25
|
+
__exportStar(require("./user/user.entity"), exports);
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6DAA2C;AAC3C,8DAA4C;AAC5C,mEAAiD;AACjD,gEAA8C;AAC9C,4EAA0D;AAC1D,wEAAsD;AACtD,qDAAmC;AACnC,sDAAoC;AACpC,qDAAmC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const AuthUser: (...dataOrPipes: any[]) => ParameterDecorator;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AuthUser = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
exports.AuthUser = (0, common_1.createParamDecorator)((_, ctx) => {
|
|
6
|
+
const req = ctx.switchToHttp().getRequest();
|
|
7
|
+
return req.user;
|
|
8
|
+
});
|
|
9
|
+
//# sourceMappingURL=auth-user.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-user.decorator.js","sourceRoot":"","sources":["../../../src/security/decorators/auth-user.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAAwE;AAE3D,QAAA,QAAQ,GAAG,IAAA,6BAAoB,EAAC,CAAC,CAAC,EAAE,GAAqB,EAAE,EAAE;IACxE,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;IAC5C,OAAO,GAAG,CAAC,IAAI,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const Roles: (...roles: string[]) => import("@nestjs/common").CustomDecorator<string>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Roles = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const Roles = (...roles) => (0, common_1.SetMetadata)('roles', roles);
|
|
6
|
+
exports.Roles = Roles;
|
|
7
|
+
//# sourceMappingURL=roles.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roles.decorator.js","sourceRoot":"","sources":["../../../src/security/decorators/roles.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAEtC,MAAM,KAAK,GAAG,CAAC,GAAG,KAAe,EAAE,EAAE,CAAC,IAAA,oBAAW,EAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAA5D,QAAA,KAAK,SAAuD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __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
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.JwtAuthGuard = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const passport_1 = require("@nestjs/passport");
|
|
12
|
+
let JwtAuthGuard = class JwtAuthGuard extends (0, passport_1.AuthGuard)('jwt') {
|
|
13
|
+
};
|
|
14
|
+
exports.JwtAuthGuard = JwtAuthGuard;
|
|
15
|
+
exports.JwtAuthGuard = JwtAuthGuard = __decorate([
|
|
16
|
+
(0, common_1.Injectable)()
|
|
17
|
+
], JwtAuthGuard);
|
|
18
|
+
//# sourceMappingURL=jwt-auth.guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt-auth.guard.js","sourceRoot":"","sources":["../../../src/security/guards/jwt-auth.guard.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAC5C,+CAA6C;AAGtC,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,IAAA,oBAAS,EAAC,KAAK,CAAC;CAAG,CAAA;AAAxC,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;GACA,YAAY,CAA4B"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { CanActivate, ExecutionContext } from '@nestjs/common';
|
|
2
|
+
import { Reflector } from '@nestjs/core';
|
|
3
|
+
export declare class RolesGuard implements CanActivate {
|
|
4
|
+
private reflector;
|
|
5
|
+
constructor(reflector: Reflector);
|
|
6
|
+
canActivate(ctx: ExecutionContext): boolean;
|
|
7
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __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
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.RolesGuard = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const core_1 = require("@nestjs/core");
|
|
15
|
+
let RolesGuard = class RolesGuard {
|
|
16
|
+
constructor(reflector) {
|
|
17
|
+
this.reflector = reflector;
|
|
18
|
+
}
|
|
19
|
+
canActivate(ctx) {
|
|
20
|
+
const required = this.reflector.get('roles', ctx.getHandler());
|
|
21
|
+
if (!required)
|
|
22
|
+
return true;
|
|
23
|
+
const req = ctx.switchToHttp().getRequest();
|
|
24
|
+
const user = req.user;
|
|
25
|
+
if (!user)
|
|
26
|
+
return false;
|
|
27
|
+
return required.some((r) => user.roles?.includes(r));
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
exports.RolesGuard = RolesGuard;
|
|
31
|
+
exports.RolesGuard = RolesGuard = __decorate([
|
|
32
|
+
(0, common_1.Injectable)(),
|
|
33
|
+
__metadata("design:paramtypes", [core_1.Reflector])
|
|
34
|
+
], RolesGuard);
|
|
35
|
+
//# sourceMappingURL=roles.guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roles.guard.js","sourceRoot":"","sources":["../../../src/security/guards/roles.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA2E;AAC3E,uCAAyC;AAGlC,IAAM,UAAU,GAAhB,MAAM,UAAU;IACrB,YAAoB,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAG,CAAC;IAE5C,WAAW,CAAC,GAAqB;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAW,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE3B,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAExB,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC;CACF,CAAA;AAbY,gCAAU;qBAAV,UAAU;IADtB,IAAA,mBAAU,GAAE;qCAEoB,gBAAS;GAD7B,UAAU,CAatB"}
|