chore: cache effective snippets results in acl role (#3102)
This commit is contained in:
parent
5ebd5d5c62
commit
cbcf70e587
@ -22,12 +22,20 @@ export class ACLRole {
|
|||||||
strategy: string | AvailableStrategyOptions;
|
strategy: string | AvailableStrategyOptions;
|
||||||
resources = new Map<string, ACLResource>();
|
resources = new Map<string, ACLResource>();
|
||||||
snippets: Set<string> = new Set();
|
snippets: Set<string> = new Set();
|
||||||
|
_snippetCache = {
|
||||||
|
params: null,
|
||||||
|
result: null,
|
||||||
|
};
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
public acl: ACL,
|
public acl: ACL,
|
||||||
public name: string,
|
public name: string,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
|
_serializeSet(set: Set<string>) {
|
||||||
|
return JSON.stringify([...set].sort());
|
||||||
|
}
|
||||||
|
|
||||||
getResource(name: string): ACLResource | undefined {
|
getResource(name: string): ACLResource | undefined {
|
||||||
return this.resources.get(name);
|
return this.resources.get(name);
|
||||||
}
|
}
|
||||||
@ -86,6 +94,11 @@ export class ACLRole {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public effectiveSnippets(): { allowed: Array<string>; rejected: Array<string> } {
|
public effectiveSnippets(): { allowed: Array<string>; rejected: Array<string> } {
|
||||||
|
const currentParams = this._serializeSet(this.snippets);
|
||||||
|
if (this._snippetCache.params === currentParams) {
|
||||||
|
return this._snippetCache.result;
|
||||||
|
}
|
||||||
|
|
||||||
const allowedSnippets = new Set<string>();
|
const allowedSnippets = new Set<string>();
|
||||||
const rejectedSnippets = new Set<string>();
|
const rejectedSnippets = new Set<string>();
|
||||||
|
|
||||||
@ -108,10 +121,16 @@ export class ACLRole {
|
|||||||
|
|
||||||
// get difference of allowed and rejected snippets
|
// get difference of allowed and rejected snippets
|
||||||
const effectiveSnippets = new Set([...allowedSnippets].filter((x) => !rejectedSnippets.has(x)));
|
const effectiveSnippets = new Set([...allowedSnippets].filter((x) => !rejectedSnippets.has(x)));
|
||||||
return {
|
|
||||||
allowed: [...effectiveSnippets],
|
this._snippetCache = {
|
||||||
rejected: [...rejectedSnippets],
|
params: currentParams,
|
||||||
|
result: {
|
||||||
|
allowed: [...effectiveSnippets],
|
||||||
|
rejected: [...rejectedSnippets],
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
return this._snippetCache.result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public snippetAllowed(actionPath: string) {
|
public snippetAllowed(actionPath: string) {
|
||||||
|
Loading…
Reference in New Issue
Block a user