alado 2.3.0 → 2.4.1
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 +82 -1
- package/dist/decorators/access-control.d.ts +2 -0
- package/dist/decorators/access-control.js +14 -0
- package/dist/decorators/access-control.js.map +1 -0
- package/dist/decorators/http.js +1 -0
- package/dist/decorators/http.js.map +1 -1
- package/dist/decorators/index.d.ts +1 -0
- package/dist/decorators/index.js +1 -0
- package/dist/decorators/index.js.map +1 -1
- package/dist/decorators/initialize-injector.js +1 -0
- package/dist/decorators/initialize-injector.js.map +1 -1
- package/dist/dto/access-control-config.d.ts +7 -0
- package/dist/dto/access-control-config.js +3 -0
- package/dist/dto/access-control-config.js.map +1 -0
- package/dist/dto/context.d.ts +2 -0
- package/dist/dto/index.d.ts +1 -0
- package/dist/dto/index.js +1 -0
- package/dist/dto/index.js.map +1 -1
- package/dist/helpers/parser/access-control-checker.d.ts +2 -0
- package/dist/helpers/parser/access-control-checker.js +29 -0
- package/dist/helpers/parser/access-control-checker.js.map +1 -0
- package/dist/helpers/parser/index.d.ts +1 -0
- package/dist/helpers/parser/index.js +1 -0
- package/dist/helpers/parser/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/options/injector-options.d.ts +2 -1
- package/dist/request-processor/request-processor.js +7 -0
- package/dist/request-processor/request-processor.js.map +1 -1
- package/package.json +1 -1
- package/ROADMAP.md +0 -0
package/README.md
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
- [defineRequest](#definerequest)
|
|
20
20
|
- [defineResponse](#defineresponse)
|
|
21
21
|
- [withAuth](#withauth)
|
|
22
|
+
- [accessControl](#acesscontrol)
|
|
22
23
|
- [DTOs](#dtos)
|
|
23
24
|
- [validateProperty](#validateproperty)
|
|
24
25
|
- [validation](#validation)
|
|
@@ -26,6 +27,7 @@
|
|
|
26
27
|
- [transformProperty](#transformproperty)
|
|
27
28
|
- [fileUploadProperty](#fileuploadproperty)
|
|
28
29
|
- [Authentication](#authentication)
|
|
30
|
+
- [Access Control](#accesscontrol)
|
|
29
31
|
- [File Uploads](#file-uploads)
|
|
30
32
|
- [OpenAPI / Swagger](#openapi--swagger)
|
|
31
33
|
- [API Reference](#api-reference)
|
|
@@ -46,6 +48,7 @@ Alado sits in a unique position — it has the **simplicity of Express**, the **
|
|
|
46
48
|
| Decorator-based routing | ✅ | ❌ | ❌ | ✅ |
|
|
47
49
|
| Built-in request validation | ✅ | ❌ | ✅ (schemas) | ✅ (pipes) |
|
|
48
50
|
| Built-in auth pipeline | ✅ | ❌ | ❌ | ✅ (guards) |
|
|
51
|
+
| Built-in access control | ✅ | ❌ | ❌ | ✅ (guards) |
|
|
49
52
|
| Auto OpenAPI 3.0 docs | ✅ | ❌ | ✅ (plugin) | ✅ (plugin) |
|
|
50
53
|
| Built-in file upload | ✅ | ❌ | ❌ | ❌ |
|
|
51
54
|
| Built-in body parsing | ✅ | ❌ (body-parser) | ✅ | ✅ |
|
|
@@ -122,6 +125,8 @@ src/
|
|
|
122
125
|
│ └── server.options.ts # AladoServerOptions
|
|
123
126
|
├── auth/
|
|
124
127
|
│ └── bearer.auth.ts # RequestAuthentication config
|
|
128
|
+
├── access-control/
|
|
129
|
+
│ └── access-control.ts # AccessControl decorator & types
|
|
125
130
|
└── modules/
|
|
126
131
|
└── user/
|
|
127
132
|
├── index.ts
|
|
@@ -301,6 +306,32 @@ See [Authentication](#authentication) for full config details.
|
|
|
301
306
|
|
|
302
307
|
---
|
|
303
308
|
|
|
309
|
+
### `accessControl`
|
|
310
|
+
|
|
311
|
+
Attaches an access control pipeline to a route.
|
|
312
|
+
|
|
313
|
+
```ts
|
|
314
|
+
@patch('/user/:id', { tags: ['User'] })
|
|
315
|
+
@accessControl([
|
|
316
|
+
{
|
|
317
|
+
inputProperty: 'auth.user.id',
|
|
318
|
+
transformInputProperty: async (v: unknown) => v.toString(),
|
|
319
|
+
compareWithProperty: 'path.id',
|
|
320
|
+
statusCode: 403,
|
|
321
|
+
message: 'Access Denied',
|
|
322
|
+
},
|
|
323
|
+
])
|
|
324
|
+
@withAuth(bearerAuth)
|
|
325
|
+
@defineRequest({ path: Id, body: UserDto })
|
|
326
|
+
async update(req: Request) {
|
|
327
|
+
console.log(req.auth.user); // injected by the auth handler
|
|
328
|
+
}
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
See [Access Control](#accesscontrol) for full config details.
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
304
335
|
### Full controller example
|
|
305
336
|
|
|
306
337
|
```ts
|
|
@@ -931,6 +962,56 @@ export const optionalAuth: RequestAuthentication = {
|
|
|
931
962
|
|
|
932
963
|
---
|
|
933
964
|
|
|
965
|
+
## Access Control
|
|
966
|
+
|
|
967
|
+
The `@accessControl` decorator enables fine-grained permission checking on route handlers by comparing values from the request against expected values.
|
|
968
|
+
|
|
969
|
+
### Configuration
|
|
970
|
+
|
|
971
|
+
```typescript
|
|
972
|
+
export type AccessControlConfig<T> = {
|
|
973
|
+
inputProperty: string; // Property path to extract from request (e.g., 'auth.user.id')
|
|
974
|
+
transformInputProperty?: (inputPropertyValue: unknown) => T | Promise<T>; // Optional transform
|
|
975
|
+
compareWithProperty?: string; // Property path to compare against
|
|
976
|
+
expectedValue?: T; // Expected value (if not using compareWithProperty)
|
|
977
|
+
statusCode: number; // HTTP status on access denial
|
|
978
|
+
message: string; // Error message on denial
|
|
979
|
+
};
|
|
980
|
+
```
|
|
981
|
+
|
|
982
|
+
Either provide `compareWithProperty` to compare two request values, or `expectedValue` to check against a fixed value.
|
|
983
|
+
|
|
984
|
+
### Usage Example
|
|
985
|
+
|
|
986
|
+
```typescript
|
|
987
|
+
@patch('/user/:id', { tags: ['User'] })
|
|
988
|
+
@accessControl([{
|
|
989
|
+
inputProperty: 'auth.user.id',
|
|
990
|
+
transformInputProperty: async (v: unknown) => v.toString(),
|
|
991
|
+
compareWithProperty: 'path.id',
|
|
992
|
+
statusCode: 403,
|
|
993
|
+
message: 'Access Denied'
|
|
994
|
+
}])
|
|
995
|
+
@withAuth(bearerAuth)
|
|
996
|
+
public async update(req: Request) {
|
|
997
|
+
// Only allow users to update their own profile
|
|
998
|
+
const { path, body } = req;
|
|
999
|
+
const user = DataStore.getUser(path.id);
|
|
1000
|
+
if (user) {
|
|
1001
|
+
DataStore.setUser(path.id, body as UserDto);
|
|
1002
|
+
}
|
|
1003
|
+
return { statusCode: user ? 200 : 404, body: user || { message: 'Not Found' } };
|
|
1004
|
+
}
|
|
1005
|
+
```
|
|
1006
|
+
|
|
1007
|
+
In this example, the decorator ensures `auth.user.id` matches `path.id` before the handler executes. If access is denied, a 403 response is returned.
|
|
1008
|
+
|
|
1009
|
+
### Multiple Rules
|
|
1010
|
+
|
|
1011
|
+
Pass multiple configs to `@accessControl([...])` to enforce multiple access rules - all must pass for the request to proceed.
|
|
1012
|
+
|
|
1013
|
+
---
|
|
1014
|
+
|
|
934
1015
|
## File Uploads
|
|
935
1016
|
|
|
936
1017
|
1. Define a files DTO:
|
|
@@ -1092,4 +1173,4 @@ The object your handler must return:
|
|
|
1092
1173
|
|
|
1093
1174
|
## License
|
|
1094
1175
|
|
|
1095
|
-
MIT © [
|
|
1176
|
+
MIT © [Data Bikers Limited](https://databikers.com)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.accessControl = accessControl;
|
|
4
|
+
const _injector_1 = require("../injector");
|
|
5
|
+
const initialize_injector_1 = require("./initialize-injector");
|
|
6
|
+
function accessControl(configs) {
|
|
7
|
+
(0, initialize_injector_1.initializeInjector)();
|
|
8
|
+
return function (...args) {
|
|
9
|
+
const [controller, method,] = args;
|
|
10
|
+
const key = `${controller.constructor.name}.${method}`;
|
|
11
|
+
_injector_1.injector.injected.accessControlMapping[key] = configs;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=access-control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access-control.js","sourceRoot":"","sources":["../../src/decorators/access-control.ts"],"names":[],"mappings":";;AAIA,sCAUC;AAbD,yCAAqC;AACrC,+DAA2D;AAE3D,SAAgB,aAAa,CAAC,OAAmC;IAC/D,IAAA,wCAAkB,GAAE,CAAC;IACrB,OAAO,UAAU,GAAG,IAAW;QAC7B,MAAM,CACJ,UAAU,EACV,MAAM,EACP,GAAG,IAAI,CAAC;QACT,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC;QACvD,oBAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;IACxD,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/decorators/http.js
CHANGED
|
@@ -21,6 +21,7 @@ function callHttpMethod(httpMethod, path, options = {}) {
|
|
|
21
21
|
app[normalizedMethod](path, {
|
|
22
22
|
title: options.title || defaultDescription,
|
|
23
23
|
auth: _injector_1.injector.injected.authMapping[key] || undefined,
|
|
24
|
+
accessControl: _injector_1.injector.injected.accessControlMapping[key] || undefined,
|
|
24
25
|
options: {
|
|
25
26
|
allowUnknownFields: false,
|
|
26
27
|
isHidden: options.isHidden || false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/decorators/http.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/decorators/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ export * from './validate-property';
|
|
|
4
4
|
export * from './transform-property';
|
|
5
5
|
export * from './file-upload-property';
|
|
6
6
|
export * from './with-auth';
|
|
7
|
+
export * from './access-control';
|
|
7
8
|
export * from './define-request';
|
|
8
9
|
export * from './define-response';
|
|
9
10
|
export * from './http';
|
package/dist/decorators/index.js
CHANGED
|
@@ -20,6 +20,7 @@ __exportStar(require("./validate-property"), exports);
|
|
|
20
20
|
__exportStar(require("./transform-property"), exports);
|
|
21
21
|
__exportStar(require("./file-upload-property"), exports);
|
|
22
22
|
__exportStar(require("./with-auth"), exports);
|
|
23
|
+
__exportStar(require("./access-control"), exports);
|
|
23
24
|
__exportStar(require("./define-request"), exports);
|
|
24
25
|
__exportStar(require("./define-response"), exports);
|
|
25
26
|
__exportStar(require("./http"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC;AACzC,sDAAoC;AACpC,sDAAoC;AACpC,uDAAqC;AACrC,yDAAuC;AACvC,8CAA4B;AAC5B,mDAAiC;AACjC,oDAAkC;AAClC,yCAAuB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC;AACzC,sDAAoC;AACpC,sDAAoC;AACpC,uDAAqC;AACrC,yDAAuC;AACvC,8CAA4B;AAC5B,mDAAiC;AACjC,mDAAiC;AACjC,oDAAkC;AAClC,yCAAuB"}
|
|
@@ -9,6 +9,7 @@ function initializeInjector() {
|
|
|
9
9
|
requestMapping: _injector_1.injector.injected.requestMapping || {},
|
|
10
10
|
responseMapping: _injector_1.injector.injected.responseMapping || {},
|
|
11
11
|
authMapping: _injector_1.injector.injected.authMapping || {},
|
|
12
|
+
accessControlMapping: _injector_1.injector.injected.accessControlMapping || {},
|
|
12
13
|
propertyDefinitionsMapping: _injector_1.injector.injected.propertyDefinitionsMapping || {},
|
|
13
14
|
controllers: _injector_1.injector.injected.controllers || {},
|
|
14
15
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initialize-injector.js","sourceRoot":"","sources":["../../src/decorators/initialize-injector.ts"],"names":[],"mappings":";;AAEA,
|
|
1
|
+
{"version":3,"file":"initialize-injector.js","sourceRoot":"","sources":["../../src/decorators/initialize-injector.ts"],"names":[],"mappings":";;AAEA,gDAWC;AAbD,yCAAqC;AAErC,SAAgB,kBAAkB;IAChC,oBAAQ,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,oBAAQ,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE;QAC9C,gBAAgB,EAAE,oBAAQ,CAAC,QAAQ,CAAC,gBAAgB,IAAI,EAAE;QAC1D,cAAc,EAAE,oBAAQ,CAAC,QAAQ,CAAC,cAAc,IAAI,EAAE;QACtD,eAAe,EAAE,oBAAQ,CAAC,QAAQ,CAAC,eAAe,IAAI,EAAE;QACxD,WAAW,EAAE,oBAAQ,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE;QAChD,oBAAoB,EAAE,oBAAQ,CAAC,QAAQ,CAAC,oBAAoB,IAAI,EAAE;QAClE,0BAA0B,EAAE,oBAAQ,CAAC,QAAQ,CAAC,0BAA0B,IAAI,EAAE;QAC9E,WAAW,EAAE,oBAAQ,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE;KACjD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AladoServerError } from './alado-server-error';
|
|
2
|
+
export type AccessControlConfig<T> = {
|
|
3
|
+
inputProperty: string;
|
|
4
|
+
transformInputProperty?: (inputPropertyValue: unknown) => T | Promise<T>;
|
|
5
|
+
compareWithProperty?: string;
|
|
6
|
+
expectedValue?: T;
|
|
7
|
+
} & AladoServerError;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access-control-config.js","sourceRoot":"","sources":["../../src/dto/access-control-config.ts"],"names":[],"mappings":""}
|
package/dist/dto/context.d.ts
CHANGED
|
@@ -2,9 +2,11 @@ import { ContextOptions } from '../options';
|
|
|
2
2
|
import { RequestAuthentication } from './request-authentication';
|
|
3
3
|
import { Response } from './response';
|
|
4
4
|
import { ContextRequest } from './request';
|
|
5
|
+
import { AccessControlConfig } from './access-control-config';
|
|
5
6
|
export type Context<T> = {
|
|
6
7
|
title: string;
|
|
7
8
|
auth?: RequestAuthentication;
|
|
9
|
+
accessControl?: AccessControlConfig<any>[];
|
|
8
10
|
options: ContextOptions;
|
|
9
11
|
request: ContextRequest;
|
|
10
12
|
response: Response<Record<keyof T, any>>;
|
package/dist/dto/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export * from './alado-server-logger';
|
|
|
4
4
|
export * from './request';
|
|
5
5
|
export * from './response';
|
|
6
6
|
export * from './property-definition';
|
|
7
|
+
export * from './access-control-config';
|
|
7
8
|
export * from './request-authentication';
|
|
8
9
|
export * from './route';
|
|
9
10
|
export * from './open-api-doc-object';
|
package/dist/dto/index.js
CHANGED
|
@@ -20,6 +20,7 @@ __exportStar(require("./alado-server-logger"), exports);
|
|
|
20
20
|
__exportStar(require("./request"), exports);
|
|
21
21
|
__exportStar(require("./response"), exports);
|
|
22
22
|
__exportStar(require("./property-definition"), exports);
|
|
23
|
+
__exportStar(require("./access-control-config"), exports);
|
|
23
24
|
__exportStar(require("./request-authentication"), exports);
|
|
24
25
|
__exportStar(require("./route"), exports);
|
|
25
26
|
__exportStar(require("./open-api-doc-object"), exports);
|
package/dist/dto/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dto/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,uDAAqC;AACrC,wDAAsC;AACtC,4CAA0B;AAC1B,6CAA2B;AAC3B,wDAAsC;AACtC,2DAAyC;AACzC,0CAAwB;AACxB,wDAAsC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dto/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,uDAAqC;AACrC,wDAAsC;AACtC,4CAA0B;AAC1B,6CAA2B;AAC3B,wDAAsC;AACtC,0DAAwC;AACxC,2DAAyC;AACzC,0CAAwB;AACxB,wDAAsC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.accessControlChecker = accessControlChecker;
|
|
4
|
+
const accessor_1 = require("../accessor");
|
|
5
|
+
async function accessControlChecker(context, request) {
|
|
6
|
+
const { accessControl } = context;
|
|
7
|
+
let success = true;
|
|
8
|
+
for (const item of accessControl) {
|
|
9
|
+
const { inputProperty, transformInputProperty, statusCode, message, compareWithProperty, expectedValue } = item;
|
|
10
|
+
let providedValue = (0, accessor_1.getProperty)(request, inputProperty);
|
|
11
|
+
if (typeof transformInputProperty === 'function') {
|
|
12
|
+
providedValue = await transformInputProperty(providedValue);
|
|
13
|
+
}
|
|
14
|
+
if (expectedValue !== undefined) {
|
|
15
|
+
success = expectedValue === providedValue;
|
|
16
|
+
}
|
|
17
|
+
if (!success) {
|
|
18
|
+
return { statusCode, message };
|
|
19
|
+
}
|
|
20
|
+
if (compareWithProperty) {
|
|
21
|
+
const compareWithVale = (0, accessor_1.getProperty)(request, compareWithProperty);
|
|
22
|
+
success = compareWithVale === providedValue;
|
|
23
|
+
}
|
|
24
|
+
if (!success) {
|
|
25
|
+
return { statusCode, message };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=access-control-checker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access-control-checker.js","sourceRoot":"","sources":["../../../src/helpers/parser/access-control-checker.ts"],"names":[],"mappings":";;AAGA,oDA6BC;AA/BD,0CAA0C;AAEnC,KAAK,UAAU,oBAAoB,CAAC,OAAqB,EAAE,OAAY;IAC5E,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAClC,IAAI,OAAO,GAAY,IAAI,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,EAAE,aAAa,EAAE,sBAAsB,EAAE,UAAU,EAAE,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;QAEhH,IAAI,aAAa,GAAY,IAAA,sBAAW,EAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAEjE,IAAI,OAAO,sBAAsB,KAAK,UAAU,EAAE,CAAC;YACjD,aAAa,GAAG,MAAM,sBAAsB,CAAC,aAAa,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,GAAG,aAAa,KAAK,aAAa,CAAC;QAC5C,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;QACjC,CAAC;QAED,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,eAAe,GAAG,IAAA,sBAAW,EAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;YAClE,OAAO,GAAG,eAAe,KAAK,aAAa,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./access-control-checker"), exports);
|
|
17
18
|
__exportStar(require("./authenticate"), exports);
|
|
18
19
|
__exportStar(require("./body-parser"), exports);
|
|
19
20
|
__exportStar(require("./query-parser"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/helpers/parser/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,gDAA8B;AAC9B,iDAA+B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/helpers/parser/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC;AACzC,iDAA+B;AAC/B,gDAA8B;AAC9B,iDAA+B"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,5 +2,5 @@ export { Context, ContextRequest, RequestAuthentication, Request, Response, Prop
|
|
|
2
2
|
export { AladoServerOptions, ContextOptions, CorsOptions, OpenApiDoc } from './options';
|
|
3
3
|
export { HttpMethod, httpStatus, ContentType } from './constants';
|
|
4
4
|
export { validate } from './helpers';
|
|
5
|
-
export { initializeApplication, defineRequest, defineResponse, fileUploadProperty, documentProperty, validateProperty, transformProperty, withAuth, get, del, head, patch, post, put, } from './decorators';
|
|
5
|
+
export { initializeApplication, defineRequest, defineResponse, fileUploadProperty, documentProperty, validateProperty, transformProperty, withAuth, accessControl, get, del, head, patch, post, put, } from './decorators';
|
|
6
6
|
export { AladoServer } from './alado-server';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AladoServer = exports.put = exports.post = exports.patch = exports.head = exports.del = exports.get = exports.withAuth = exports.transformProperty = exports.validateProperty = exports.documentProperty = exports.fileUploadProperty = exports.defineResponse = exports.defineRequest = exports.initializeApplication = exports.validate = exports.ContentType = exports.httpStatus = exports.HttpMethod = void 0;
|
|
3
|
+
exports.AladoServer = exports.put = exports.post = exports.patch = exports.head = exports.del = exports.get = exports.accessControl = exports.withAuth = exports.transformProperty = exports.validateProperty = exports.documentProperty = exports.fileUploadProperty = exports.defineResponse = exports.defineRequest = exports.initializeApplication = exports.validate = exports.ContentType = exports.httpStatus = exports.HttpMethod = void 0;
|
|
4
4
|
var _const_1 = require("./constants");
|
|
5
5
|
Object.defineProperty(exports, "HttpMethod", { enumerable: true, get: function () { return _const_1.HttpMethod; } });
|
|
6
6
|
Object.defineProperty(exports, "httpStatus", { enumerable: true, get: function () { return _const_1.httpStatus; } });
|
|
@@ -16,6 +16,7 @@ Object.defineProperty(exports, "documentProperty", { enumerable: true, get: func
|
|
|
16
16
|
Object.defineProperty(exports, "validateProperty", { enumerable: true, get: function () { return _decorator_1.validateProperty; } });
|
|
17
17
|
Object.defineProperty(exports, "transformProperty", { enumerable: true, get: function () { return _decorator_1.transformProperty; } });
|
|
18
18
|
Object.defineProperty(exports, "withAuth", { enumerable: true, get: function () { return _decorator_1.withAuth; } });
|
|
19
|
+
Object.defineProperty(exports, "accessControl", { enumerable: true, get: function () { return _decorator_1.accessControl; } });
|
|
19
20
|
Object.defineProperty(exports, "get", { enumerable: true, get: function () { return _decorator_1.get; } });
|
|
20
21
|
Object.defineProperty(exports, "del", { enumerable: true, get: function () { return _decorator_1.del; } });
|
|
21
22
|
Object.defineProperty(exports, "head", { enumerable: true, get: function () { return _decorator_1.head; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAYA,iCAA6D;AAApD,oGAAA,UAAU,OAAA;AAAE,oGAAA,UAAU,OAAA;AAAE,qGAAA,WAAW,OAAA;AAC5C,mCAAmC;AAA1B,mGAAA,QAAQ,OAAA;AACjB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAYA,iCAA6D;AAApD,oGAAA,UAAU,OAAA;AAAE,oGAAA,UAAU,OAAA;AAAE,qGAAA,WAAW,OAAA;AAC5C,mCAAmC;AAA1B,mGAAA,QAAQ,OAAA;AACjB,yCAgBoB;AAflB,mHAAA,qBAAqB,OAAA;AACrB,2GAAA,aAAa,OAAA;AACb,4GAAA,cAAc,OAAA;AACd,gHAAA,kBAAkB,OAAA;AAClB,8GAAA,gBAAgB,OAAA;AAChB,8GAAA,gBAAgB,OAAA;AAChB,+GAAA,iBAAiB,OAAA;AACjB,sGAAA,QAAQ,OAAA;AACR,2GAAA,aAAa,OAAA;AACb,iGAAA,GAAG,OAAA;AACH,iGAAA,GAAG,OAAA;AACH,kGAAA,IAAI,OAAA;AACJ,mGAAA,KAAK,OAAA;AACL,kGAAA,IAAI,OAAA;AACJ,iGAAA,GAAG,OAAA;AAEL,iCAAqC;AAA5B,qGAAA,WAAW,OAAA"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { AladoServer } from '../alado-server';
|
|
2
|
-
import { FilePropertyDefinition, PropertyDefinition, RequestAuthentication } from '../dto';
|
|
2
|
+
import { AccessControlConfig, FilePropertyDefinition, PropertyDefinition, RequestAuthentication } from '../dto';
|
|
3
3
|
export type InjectorOptions = {
|
|
4
4
|
appMapping: Record<string, AladoServer>;
|
|
5
5
|
shadowAppMapping: Record<string, any>;
|
|
6
6
|
authMapping: Record<string, RequestAuthentication>;
|
|
7
|
+
accessControlMapping: Record<string, AccessControlConfig<any>[]>;
|
|
7
8
|
requestMapping: Record<string, Record<string, Record<string, PropertyDefinition | FilePropertyDefinition>>>;
|
|
8
9
|
responseMapping: Record<string, any>;
|
|
9
10
|
controllers: Record<string, Object>;
|
|
@@ -160,6 +160,13 @@ class RequestProcessor {
|
|
|
160
160
|
return this.respondError(res, authError, backgroundHeaders);
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
|
+
// Access control
|
|
164
|
+
if (Array.isArray(context.accessControl) && context.accessControl.length) {
|
|
165
|
+
const accessError = await (0, _helper_1.accessControlChecker)(context, request);
|
|
166
|
+
if (accessError) {
|
|
167
|
+
return this.respondError(res, accessError, backgroundHeaders);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
163
170
|
// Validate request
|
|
164
171
|
for (const key in context.request) {
|
|
165
172
|
const error = await (0, _helper_1.validateRequestPart)(key, context, request);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-processor.js","sourceRoot":"","sources":["../../src/request-processor/request-processor.ts"],"names":[],"mappings":";;;AACA,+BAA4B;AAC5B,2BAAsE;AAEtE,mCAAiD;AAGjD,
|
|
1
|
+
{"version":3,"file":"request-processor.js","sourceRoot":"","sources":["../../src/request-processor/request-processor.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/ROADMAP.md
DELETED
|
File without changes
|