Skip to content

Commit 24dd7b4

Browse files
authored
ix(server-core, api-gateway): permissions function signature (#6267)
1 parent 6135ae6 commit 24dd7b4

File tree

3 files changed

+16
-9
lines changed

3 files changed

+16
-9
lines changed

packages/cubejs-api-gateway/src/gateway.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,10 @@ class ApiGateway {
118118

119119
public readonly checkAuthSystemFn: CheckAuthFn;
120120

121-
protected readonly contextToPermissionsFn: ContextToPermissionsFn;
121+
protected readonly contextToPermFn: ContextToPermissionsFn;
122+
123+
protected readonly contextToPermDefFn: ContextToPermissionsFn =
124+
async () => ['liveliness', 'graphql', 'meta', 'data'];
122125

123126
protected readonly checkAuthMiddleware: CheckAuthMiddlewareFn;
124127

@@ -156,7 +159,7 @@ class ApiGateway {
156159

157160
this.checkAuthFn = this.createCheckAuthFn(options);
158161
this.checkAuthSystemFn = this.createCheckAuthSystemFn();
159-
this.contextToPermissionsFn = this.createContextToPermissionsFn(options);
162+
this.contextToPermFn = this.createContextToPermissionsFn(options);
160163
this.checkAuthMiddleware = options.checkAuthMiddleware
161164
? this.wrapCheckAuthMiddleware(options.checkAuthMiddleware)
162165
: this.checkAuth;
@@ -2193,15 +2196,18 @@ class ApiGateway {
21932196
}
21942197
return permissionsCache;
21952198
}
2196-
: async () => ['liveliness', 'graphql', 'meta', 'data'];
2199+
: this.contextToPermDefFn;
21972200
}
21982201

21992202
protected async assertPermission(
22002203
permission: Permission,
22012204
securityContext?: any,
22022205
): Promise<void> {
22032206
const permissions =
2204-
await this.contextToPermissionsFn(securityContext || {});
2207+
await this.contextToPermFn(
2208+
securityContext || {},
2209+
await this.contextToPermDefFn(),
2210+
);
22052211
const permited = permissions.indexOf(permission) >= 0;
22062212
if (!permited) {
22072213
throw new CubejsHandlerError(

packages/cubejs-api-gateway/src/types/auth.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ type CanSwitchSQLUserFn =
8181
* Returns permissions tuple from a security context.
8282
*/
8383
type ContextToPermissionsFn =
84-
(securityContext?: any) => Promise<PermissionsTuple>;
84+
(securityContext?: any, permissions?: PermissionsTuple) =>
85+
Promise<PermissionsTuple>;
8586

8687
export {
8788
CheckAuthInternalOptions,

packages/cubejs-server-core/test/unit/OptsHandler.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1055,7 +1055,7 @@ describe('OptsHandler class', () => {
10551055
});
10561056

10571057
const gateway = <any>core.apiGateway();
1058-
const permissions = await gateway.contextToPermissionsFn();
1058+
const permissions = await gateway.contextToPermFn();
10591059
expect(permissions).toBeDefined();
10601060
expect(Array.isArray(permissions)).toBeTruthy();
10611061
expect(permissions).toEqual(['liveliness', 'graphql', 'meta', 'data']);
@@ -1089,7 +1089,7 @@ describe('OptsHandler class', () => {
10891089

10901090
const gateway = <any>core.apiGateway();
10911091
expect(async () => {
1092-
await gateway.contextToPermissionsFn();
1092+
await gateway.contextToPermFn();
10931093
}).rejects.toThrow(
10941094
'A user-defined contextToPermissions function returns an inconsistent type.'
10951095
);
@@ -1123,7 +1123,7 @@ describe('OptsHandler class', () => {
11231123

11241124
const gateway = <any>core.apiGateway();
11251125
expect(async () => {
1126-
await gateway.contextToPermissionsFn();
1126+
await gateway.contextToPermFn();
11271127
}).rejects.toThrow(
11281128
'A user-defined contextToPermissions function returns a wrong permission: job'
11291129
);
@@ -1150,7 +1150,7 @@ describe('OptsHandler class', () => {
11501150
});
11511151

11521152
const gateway = <any>core.apiGateway();
1153-
const permissions = await gateway.contextToPermissionsFn();
1153+
const permissions = await gateway.contextToPermFn();
11541154
expect(permissions).toBeDefined();
11551155
expect(Array.isArray(permissions)).toBeTruthy();
11561156
expect(permissions).toEqual(['liveliness', 'graphql', 'meta', 'data', 'jobs']);

0 commit comments

Comments
 (0)