From 4e1f11c5858d1dd3c6ed63b4134357dc9da43afc Mon Sep 17 00:00:00 2001 From: dzcpy <203980+dzcpy@users.noreply.github.com> Date: Sat, 13 Nov 2021 09:02:04 +0800 Subject: [PATCH 1/5] Update context.proxy.ts --- src/proxies/context.proxy.ts | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/proxies/context.proxy.ts b/src/proxies/context.proxy.ts index 43217412..35462958 100644 --- a/src/proxies/context.proxy.ts +++ b/src/proxies/context.proxy.ts @@ -1,5 +1,5 @@ import { GqlContextType, GqlExecutionContext } from '@nestjs/graphql'; -import { ExecutionContext, NotAcceptableException } from '@nestjs/common'; +import { ContextType, ExecutionContext, NotAcceptableException } from '@nestjs/common'; import { AuthorizableRequest } from 'interfaces/request.interface'; export class ContextProxy { @@ -10,20 +10,20 @@ export class ContextProxy { } public getRequest(): AuthorizableRequest { - if (this.context.getType() === 'http') { - return this.context.getArgByIndex(0); + switch (this.context.getType()) { + case 'http': + case 'ws': + return this.context.switchToHttp().getRequest(); + case 'graphql': + const ctx = GqlExecutionContext.create(this.context); + const request = ctx.getContext().req; + request.params = { + ...ctx.getArgs(), + ...request.params, + }; + return request; + default: + throw new NotAcceptableException(); } - - if (this.context.getType() === 'graphql') { - const ctx = GqlExecutionContext.create(this.context); - const request = ctx.getContext().req; - request.params = { - ...ctx.getArgs(), - ...request.params, - }; - return request; - } - - throw new NotAcceptableException(); } } From 55b3f9aaaac8e30d7ae8c4fd74f9ae2248aac050 Mon Sep 17 00:00:00 2001 From: dzcpy <203980+dzcpy@users.noreply.github.com> Date: Sat, 13 Nov 2021 09:05:18 +0800 Subject: [PATCH 2/5] Update context.proxy.spec.ts --- src/proxies/context.proxy.spec.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/proxies/context.proxy.spec.ts b/src/proxies/context.proxy.spec.ts index 6bf34e07..f9090c88 100644 --- a/src/proxies/context.proxy.spec.ts +++ b/src/proxies/context.proxy.spec.ts @@ -17,6 +17,14 @@ describe('ContextProxy', () => { const contextProxy = ContextProxy.create(context); expect(contextProxy.getRequest()).toEqual(req); }); + + it('should get request from ws context', () => { + const req = new Object(); + const context = new ExecutionContextHost([{}, undefined, { req }]); + context.getType = jest.fn().mockImplementation(() => 'ws'); + const contextProxy = ContextProxy.create(context); + expect(contextProxy.getRequest()).toEqual(req); + }); it('should throw error for rpc context', () => { const req = new Object(); From 12aec1f140be3b8f49827ad336e48d222c5637fa Mon Sep 17 00:00:00 2001 From: yuanfang-dev Date: Sat, 13 Nov 2021 17:22:47 +0800 Subject: [PATCH 3/5] feat: allow lamda function matcher --- src/interfaces/permissions.interface.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/interfaces/permissions.interface.ts b/src/interfaces/permissions.interface.ts index 12b2aa29..a7fc00b4 100644 --- a/src/interfaces/permissions.interface.ts +++ b/src/interfaces/permissions.interface.ts @@ -1,4 +1,4 @@ -import { Ability, AbilityBuilder } from '@casl/ability'; +import { Ability, AbilityBuilder, PureAbility } from '@casl/ability'; import { AnyClass, SubjectType } from '@casl/ability/dist/types/types'; import { AuthorizableUser } from './authorizable-user.interface'; @@ -8,7 +8,7 @@ export class UserAbilityBuilder< Subjects = SubjectType, Actions extends string = DefaultActions, User extends AuthorizableUser = AuthorizableUser, -> extends AbilityBuilder { +> extends AbilityBuilder { constructor( public user: User, public permissions: AnyPermissions, From f666d432a810a6eb8147cfedccbdb507c4e0f335 Mon Sep 17 00:00:00 2001 From: Denis Grankin Date: Mon, 22 Nov 2021 02:26:33 +0200 Subject: [PATCH 4/5] Fix lint error in context.proxy.ts --- src/proxies/context.proxy.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/proxies/context.proxy.ts b/src/proxies/context.proxy.ts index 35462958..c77f6184 100644 --- a/src/proxies/context.proxy.ts +++ b/src/proxies/context.proxy.ts @@ -14,7 +14,7 @@ export class ContextProxy { case 'http': case 'ws': return this.context.switchToHttp().getRequest(); - case 'graphql': + case 'graphql': { const ctx = GqlExecutionContext.create(this.context); const request = ctx.getContext().req; request.params = { @@ -22,6 +22,7 @@ export class ContextProxy { ...request.params, }; return request; + } default: throw new NotAcceptableException(); } From 5cbda4fd42831ea627037040bcee1a41b7a87307 Mon Sep 17 00:00:00 2001 From: Denis Grankin Date: Mon, 22 Nov 2021 02:27:41 +0200 Subject: [PATCH 5/5] Revert Ability to PureAbility change --- src/interfaces/permissions.interface.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/interfaces/permissions.interface.ts b/src/interfaces/permissions.interface.ts index a7fc00b4..12b2aa29 100644 --- a/src/interfaces/permissions.interface.ts +++ b/src/interfaces/permissions.interface.ts @@ -1,4 +1,4 @@ -import { Ability, AbilityBuilder, PureAbility } from '@casl/ability'; +import { Ability, AbilityBuilder } from '@casl/ability'; import { AnyClass, SubjectType } from '@casl/ability/dist/types/types'; import { AuthorizableUser } from './authorizable-user.interface'; @@ -8,7 +8,7 @@ export class UserAbilityBuilder< Subjects = SubjectType, Actions extends string = DefaultActions, User extends AuthorizableUser = AuthorizableUser, -> extends AbilityBuilder { +> extends AbilityBuilder { constructor( public user: User, public permissions: AnyPermissions,