Skip to content

Commit

Permalink
fix: add cache to generateGFunction
Browse files Browse the repository at this point in the history
Signed-off-by: Zixuan Liu <nodeces@gmail.com>
  • Loading branch information
nodece committed Sep 9, 2020
1 parent 45ea2b7 commit e90bed2
Showing 1 changed file with 13 additions and 3 deletions.
16 changes: 13 additions & 3 deletions src/util/builtinOperators.ts
Expand Up @@ -233,19 +233,29 @@ function globMatch(string: string, pattern: string): boolean {

// generateGFunction is the factory method of the g(_, _) function.
function generateGFunction(rm: rbac.RoleManager): any {
const memorized = new Map<string, boolean>();
return async function func(...args: any[]): Promise<boolean> {
const key = args.toString();
let value = memorized.get(key);
if (value) {
return value;
}

const [arg0, arg1] = args;
const name1: string = (arg0 || '').toString();
const name2: string = (arg1 || '').toString();

if (!rm) {
return name1 === name2;
value = name1 === name2;
} else if (args.length === 2) {
return await rm.hasLink(name1, name2);
value = await rm.hasLink(name1, name2);
} else {
const domain: string = args[2].toString();
return await rm.hasLink(name1, name2, domain);
value = await rm.hasLink(name1, name2, domain);
}

memorized.set(key, value);
return value;
};
}

Expand Down

0 comments on commit e90bed2

Please sign in to comment.