permission-backend: accept resourceRef as array

Signed-off-by: Vincenzo Scamporlino <vincenzos@spotify.com>
This commit is contained in:
Vincenzo Scamporlino
2025-04-29 10:46:10 +02:00
parent 669038aab8
commit 7853dac010
7 changed files with 47 additions and 157 deletions
@@ -285,7 +285,7 @@ describe('PermissionClient', () => {
{
id: expect.any(String),
permission: mockPermission,
resourceRefs: ['foo:bar', 'foo:car', 'foo:baz'],
resourceRef: ['foo:bar', 'foo:car', 'foo:baz'],
},
{
id: expect.any(String),
@@ -453,7 +453,7 @@ describe('PermissionClient', () => {
attributes: {},
resourceType: 'foo',
},
resourceRefs: ['foo:bar', 'foo:car'],
resourceRef: ['foo:bar', 'foo:car'],
id: expect.any(String),
},
{
@@ -471,7 +471,7 @@ describe('PermissionClient', () => {
attributes: {},
resourceType: 'foo',
},
resourceRefs: ['r2', 'r1'],
resourceRef: ['r2', 'r1'],
id: expect.any(String),
},
],
@@ -210,12 +210,12 @@ export class PermissionClient implements PermissionEvaluator {
if (isResourcePermission(permission)) {
request[permission.name] ||= {
permission,
resourceRefs: [],
resourceRef: [],
id: uuid.v4(),
};
if (resourceRef) {
request[permission.name].resourceRefs?.push(resourceRef);
request[permission.name].resourceRef?.push(resourceRef);
}
} else {
request[permission.name] ||= {
@@ -231,10 +231,15 @@ export class PermissionClient implements PermissionEvaluator {
options,
);
const responsesById = parsedResponse.items.reduce((acc, r) => {
acc[r.id] = r;
return acc;
}, {} as Record<string, (typeof parsedResponse)['items'][number]>);
return queries.map(query => {
const { id } = request[query.permission.name];
const item = parsedResponse.items.find(i => i.id === id)!;
const item = responsesById[id];
return {
result: query.resourceRef ? item.result.shift()! : item.result[0],
};
@@ -278,7 +283,7 @@ export class PermissionClient implements PermissionEvaluator {
export type BatchedAuthorizePermissionRequest = IdentifiedPermissionMessage<
| {
permission: BasicPermission;
resourceRefs?: undefined;
resourceRef?: undefined;
}
| { permission: ResourcePermission; resourceRefs: string[] }
| { permission: ResourcePermission; resourceRef: string[] }
>;