UNPKG

stackpress

Version:

Incept is a content management framework.

50 lines (49 loc) 1.69 kB
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); }