16 lines
460 B
TypeScript
16 lines
460 B
TypeScript
import { Wildcard } from "@/util/wildcard"
|
|
|
|
type Rule = {
|
|
permission: string
|
|
pattern: string
|
|
action: "allow" | "deny" | "ask"
|
|
}
|
|
|
|
export function evaluate(permission: string, pattern: string, ...rulesets: Rule[][]): Rule {
|
|
const rules = rulesets.flat()
|
|
const match = rules.findLast(
|
|
(rule) => Wildcard.match(permission, rule.permission) && Wildcard.match(pattern, rule.pattern),
|
|
)
|
|
return match ?? { action: "ask", permission, pattern: "*" }
|
|
}
|