exclude-read-only-user.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { ErrorV3 } from '@growi/core/dist/models';
  2. import type { NextFunction, Response } from 'express';
  3. import type { Request } from 'express-validator/src/base';
  4. import loggerFactory from '~/utils/logger';
  5. import { configManager } from '../service/config-manager';
  6. const logger = loggerFactory('growi:middleware:exclude-read-only-user');
  7. export const excludeReadOnlyUser = (req: Request, res: Response & { apiv3Err }, next: () => NextFunction): NextFunction => {
  8. const user = req.user;
  9. if (user == null) {
  10. logger.warn('req.user is null');
  11. return next();
  12. }
  13. if (user.readOnly) {
  14. const message = 'This user is read only user';
  15. logger.warn(message);
  16. return res.apiv3Err(new ErrorV3(message, 'validation_failed'));
  17. }
  18. return next();
  19. };
  20. export const excludeReadOnlyUserIfCommentNotAllowed = (req: Request, res: Response & { apiv3Err }, next: () => NextFunction): NextFunction => {
  21. const user = req.user;
  22. const isRomUserAllowedToComment = configManager.getConfig('crowi', 'security:isRomUserAllowedToComment');
  23. if (user == null) {
  24. logger.warn('req.user is null');
  25. return next();
  26. }
  27. if (user.readOnly && !isRomUserAllowedToComment) {
  28. const message = 'This user is read only user and comment is not allowed';
  29. logger.warn(message);
  30. return res.apiv3Err(new ErrorV3(message, 'validation_failed'));
  31. }
  32. return next();
  33. };