stackpress
Version:
Incept is a content management framework.
50 lines (49 loc) • 1.69 kB
JavaScript
export const isRegExp = /^\/.+\/[igmsuy]*$/;
export function matchAnyEvent(permit, permissions) {
if (permissions.includes(permit)) {
return true;
}
for (const permission of permissions) {
if (matchEvent(permit, permission)) {
return true;
}
}
return false;
}
export function matchAnyRoute(permit, permissions) {
for (const permission of permissions) {
if (matchRoute(permit, permission)) {
return true;
}
}
return false;
}
export function matchEvent(permit, permission) {
if (permission === permit) {
return true;
}
const pattern = !isRegExp.test(permission)
? `/^${permission
.replaceAll('*', '([^-]+)')
.replaceAll('([^-]+)([^-]+)', '(.*)')}$/ig`
: permission;
const regexp = new RegExp(pattern.substring(pattern.indexOf('/') + 1, pattern.lastIndexOf('/')), pattern.substring(pattern.lastIndexOf('/') + 1));
return regexp.test(permit);
}
export function matchRoute(permit, permission) {
if (permission.method !== 'ALL'
&& permission.method !== permit.method) {
return false;
}
if (permission.route === permit.route) {
return true;
}
const pattern = !isRegExp.test(permission.route)
? `/^${permission.route
.replace(/(\:[a-zA-Z0-9\-_]+)/g, '*')
.replaceAll('*', '([^/]+)')
.replaceAll('([^/]+)([^/]+)', '(.*)')}$/ig`
: permission.route;
const regexp = new RegExp(pattern.substring(pattern.indexOf('/') + 1, pattern.lastIndexOf('/')), pattern.substring(pattern.lastIndexOf('/') + 1));
return regexp.test(permit.route);
}