export async function createInmemoryDataFilterOso() {
const constrain = (predicates: any[], filter: Filter) => {
switch (filter.kind) {
case 'Eq':
predicates.push(
(obj: any) => obj[filter.field as string] === filter.value
);
break;
case 'Neq':
predicates.push(
(obj: any) => obj[filter.field as string] !== filter.value
);
break;
case 'In':
predicates.push((obj: any) =>
(filter.value as any[]).some((v) => obj[filter.field as string] === v)
);
break;
default:
throw new AppError(
`unknown filter kind: ${filter.kind}`,
ErrorCodes.INVALID_OPERATION
);
}
return predicates;
};
const buildQuery: BuildQueryFn = (filters) => {
return filters.reduce(constrain, []);
};
const osoDataFilter = new Oso();
osoDataFilter.registerClass(User);
osoDataFilter.registerClass(UserMenuItem, {
buildQuery,
execQuery: (predicates: any[]) => {
return predicates.reduce((menuItems, predicate) => {
return menuItems.filter(predicate);
}, USER_MENU_ITEMS);
},
});
await osoDataFilter.loadFiles([
`${__dirname}/../policies/main.polar`,
]);
return osoDataFilter;
}
Last active
November 24, 2021 06:31
-
-
Save kenfdev/508a85e87c90cf50fe90eed7b4f7f54f to your computer and use it in GitHub Desktop.
Oso
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment