Skip to content

Commit 8469968

Browse files
committed
add application auth handling in rest API
1 parent adcee8b commit 8469968

File tree

1 file changed

+17
-8
lines changed

1 file changed

+17
-8
lines changed

packages/twenty-server/src/engine/api/rest/core/handlers/rest-api-base.handler.ts

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ import { AuthenticatedRequest } from 'src/engine/api/rest/types/authenticated-re
1616
import { ActorFromAuthContextService } from 'src/engine/core-modules/actor/services/actor-from-auth-context.service';
1717
import { ApiKeyRoleService } from 'src/engine/core-modules/api-key/services/api-key-role.service';
1818
import { isApiKeyAuthContext } from 'src/engine/core-modules/auth/guards/is-api-key-auth-context.guard';
19+
import { isApplicationAuthContext } from 'src/engine/core-modules/auth/guards/is-application-auth-context.guard';
1920
import { isUserAuthContext } from 'src/engine/core-modules/auth/guards/is-user-auth-context.guard';
2021
import { AccessTokenService } from 'src/engine/core-modules/auth/token/services/access-token.service';
21-
import { WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
22+
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
2223
import { WorkspaceDomainsService } from 'src/engine/core-modules/domain/workspace-domains/services/workspace-domains.service';
2324
import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service';
2425
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
@@ -87,18 +88,27 @@ export abstract class RestApiBaseHandler {
8788
}
8889

8990
private getObjectsPermissions = async (authContext: WorkspaceAuthContext) => {
91+
const workspaceId = authContext.workspace.id;
9092
let roleId: string;
9193

9294
if (isApiKeyAuthContext(authContext)) {
9395
roleId = await this.apiKeyRoleService.getRoleIdForApiKeyId(
9496
authContext.apiKey.id,
95-
authContext.workspace.id,
97+
workspaceId,
9698
);
99+
} else if (isApplicationAuthContext(authContext)) {
100+
if (!isDefined(authContext.application.defaultLogicFunctionRoleId)) {
101+
throw new PermissionsException(
102+
PermissionsExceptionMessage.APPLICATION_ROLE_NOT_FOUND,
103+
PermissionsExceptionCode.APPLICATION_ROLE_NOT_FOUND,
104+
);
105+
}
106+
roleId = authContext.application.defaultLogicFunctionRoleId;
97107
} else if (isUserAuthContext(authContext)) {
98108
const userWorkspaceRoleId =
99109
await this.userRoleService.getRoleIdForUserWorkspace({
100110
userWorkspaceId: authContext.userWorkspaceId,
101-
workspaceId: authContext.workspace.id,
111+
workspaceId,
102112
});
103113

104114
if (!isDefined(userWorkspaceRoleId)) {
@@ -111,16 +121,15 @@ export abstract class RestApiBaseHandler {
111121
roleId = userWorkspaceRoleId;
112122
} else {
113123
throw new PermissionsException(
114-
'Authentication context is invalid',
124+
PermissionsExceptionMessage.NO_AUTHENTICATION_CONTEXT,
115125
PermissionsExceptionCode.NO_AUTHENTICATION_CONTEXT,
116126
);
117127
}
118128

119129
const { rolesPermissions } =
120-
await this.workspaceCacheService.getOrRecompute(
121-
authContext.workspace.id,
122-
['rolesPermissions'],
123-
);
130+
await this.workspaceCacheService.getOrRecompute(workspaceId, [
131+
'rolesPermissions',
132+
]);
124133

125134
return { objectsPermissions: rolesPermissions[roleId] };
126135
};

0 commit comments

Comments
 (0)