slack-integration.ts 758 B

123456789101112131415161718192021222324252627
  1. type CommandPermission = { [key:string]: string[] | boolean }
  2. export const checkPermission = (
  3. commandPermission:CommandPermission, commandOrActionIdOrCallbackId:string, fromChannel:string,
  4. ):boolean => {
  5. let isPermitted = false;
  6. Object.entries(commandPermission).forEach((entry) => {
  7. const [command, value] = entry;
  8. const permission = value;
  9. const commandRegExp = new RegExp(`(^${command}$)|(^${command}:\\w+)`);
  10. if (!commandRegExp.test(commandOrActionIdOrCallbackId)) return;
  11. // permission check
  12. if (permission === true) {
  13. isPermitted = true;
  14. return;
  15. }
  16. if (Array.isArray(permission) && permission.includes(fromChannel)) {
  17. isPermitted = true;
  18. return;
  19. }
  20. });
  21. return isPermitted;
  22. };