From f1c7c847e334caf33fc8208c9418f9d857f54155 Mon Sep 17 00:00:00 2001 From: GSI Date: Mon, 13 Mar 2023 16:56:05 +0100 Subject: [PATCH] evolution: add auth object on CrudRequest - https://github.com/gid-oss/dataui-nestjs-crud/issues/11 --- .../interceptors/crud-request.interceptor.ts | 20 +++++++++++++++---- .../src/interfaces/crud-request.interface.ts | 4 +++- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/packages/crud/src/interceptors/crud-request.interceptor.ts b/packages/crud/src/interceptors/crud-request.interceptor.ts index 4c6cc5fc..ec3e2a28 100644 --- a/packages/crud/src/interceptors/crud-request.interceptor.ts +++ b/packages/crud/src/interceptors/crud-request.interceptor.ts @@ -33,9 +33,10 @@ export class CrudRequestInterceptor extends CrudBaseInterceptor parser.parseQuery(req.query, crudOptions.operators?.custom); + let auth = null; if (!isNil(ctrlOptions)) { const search = this.getSearch(parser, crudOptions, action, req.params); - const auth = this.getAuth(parser, crudOptions, req); + auth = this.getAuth(parser, crudOptions, req); parser.search = auth.or ? { $or: [auth.or, { $and: search }] } : { $and: [auth.filter, ...search] }; @@ -43,7 +44,7 @@ export class CrudRequestInterceptor extends CrudBaseInterceptor parser.search = { $and: this.getSearch(parser, crudOptions, action) }; } - req[PARSED_CRUD_REQUEST_KEY] = this.getCrudRequest(parser, crudOptions); + req[PARSED_CRUD_REQUEST_KEY] = this.getCrudRequest(parser, crudOptions, auth?.auth); } return next.handle(); @@ -58,10 +59,10 @@ export class CrudRequestInterceptor extends CrudBaseInterceptor getCrudRequest( parser: RequestQueryParser, crudOptions: Partial, + auth?: any, ): CrudRequest { const parsed = parser.getParsed(); const { query, routes, params, operators } = crudOptions; - return { parsed, options: { @@ -70,6 +71,7 @@ export class CrudRequestInterceptor extends CrudBaseInterceptor params, operators, }, + auth, }; } @@ -159,7 +161,7 @@ export class CrudRequestInterceptor extends CrudBaseInterceptor parser: RequestQueryParser, crudOptions: Partial, req: any, - ): { filter?: any; or?: any } { + ): { filter?: any; or?: any; auth?: any } { const auth: any = {}; /* istanbul ignore else */ @@ -168,6 +170,16 @@ export class CrudRequestInterceptor extends CrudBaseInterceptor ? req[crudOptions.auth.property] : req; + if (crudOptions.auth.property && req[crudOptions.auth.property]) { + if (typeof req[crudOptions.auth.property] === 'object') { + if (Object.keys(req[crudOptions.auth.property]).length > 0) { + auth.auth = req[crudOptions.auth.property]; + } + } else { + auth.auth = req[crudOptions.auth.property]; + } + } + if (isFunction(crudOptions.auth.or)) { auth.or = crudOptions.auth.or(userOrRequest); } diff --git a/packages/crud/src/interfaces/crud-request.interface.ts b/packages/crud/src/interfaces/crud-request.interface.ts index 8090a115..f622d58c 100644 --- a/packages/crud/src/interfaces/crud-request.interface.ts +++ b/packages/crud/src/interfaces/crud-request.interface.ts @@ -2,7 +2,9 @@ import { ParsedRequestParams } from '@dataui/crud-request'; import { CrudRequestOptions } from '../interfaces'; -export interface CrudRequest { +export interface CrudRequest { parsed: ParsedRequestParams; options: CrudRequestOptions; + /** authenticated user's from request */ + auth?: AUTH; }