@@ -41,6 +41,8 @@ import { User } from 'src/engine/core-modules/user/user.entity';
41
41
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity' ;
42
42
import { EmailService } from 'src/engine/integrations/email/email.service' ;
43
43
import { EnvironmentService } from 'src/engine/integrations/environment/environment.service' ;
44
+ import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager' ;
45
+ import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity' ;
44
46
45
47
@Injectable ( )
46
48
export class TokenService {
@@ -55,6 +57,7 @@ export class TokenService {
55
57
@InjectRepository ( Workspace , 'core' )
56
58
private readonly workspaceRepository : Repository < Workspace > ,
57
59
private readonly emailService : EmailService ,
60
+ private readonly twentyORMGlobalManager : TwentyORMGlobalManager ,
58
61
) { }
59
62
60
63
async generateAccessToken (
@@ -91,9 +94,33 @@ export class TokenService {
91
94
) ;
92
95
}
93
96
97
+ const workspaceIdNonNullable = workspaceId
98
+ ? workspaceId
99
+ : user . defaultWorkspace . id ;
100
+
101
+ const workspaceMemberRepository =
102
+ await this . twentyORMGlobalManager . getRepositoryForWorkspace < WorkspaceMemberWorkspaceEntity > (
103
+ workspaceIdNonNullable ,
104
+ 'workspaceMember' ,
105
+ ) ;
106
+
107
+ const workspaceMember = await workspaceMemberRepository . findOne ( {
108
+ where : {
109
+ userId : user . id ,
110
+ } ,
111
+ } ) ;
112
+
113
+ if ( ! workspaceMember ) {
114
+ throw new AuthException (
115
+ 'User is not a member of the workspace' ,
116
+ AuthExceptionCode . FORBIDDEN_EXCEPTION ,
117
+ ) ;
118
+ }
119
+
94
120
const jwtPayload : JwtPayload = {
95
121
sub : user . id ,
96
122
workspaceId : workspaceId ? workspaceId : user . defaultWorkspace . id ,
123
+ workspaceMemberId : workspaceMember . id ,
97
124
} ;
98
125
99
126
return {
@@ -247,11 +274,10 @@ export class TokenService {
247
274
this . environmentService . get ( 'ACCESS_TOKEN_SECRET' ) ,
248
275
) ;
249
276
250
- const { user, apiKey, workspace } = await this . jwtStrategy . validate (
251
- decoded as JwtPayload ,
252
- ) ;
277
+ const { user, apiKey, workspace, workspaceMemberId } =
278
+ await this . jwtStrategy . validate ( decoded as JwtPayload ) ;
253
279
254
- return { user, apiKey, workspace } ;
280
+ return { user, apiKey, workspace, workspaceMemberId } ;
255
281
}
256
282
257
283
async verifyLoginToken ( loginToken : string ) : Promise < string > {
0 commit comments