UserMembershipRouter.mjs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. import UserMembershipMiddleware from './UserMembershipMiddleware.mjs'
  2. import UserMembershipController from './UserMembershipController.mjs'
  3. import SubscriptionGroupController from '../Subscription/SubscriptionGroupController.mjs'
  4. import TeamInvitesController from '../Subscription/TeamInvitesController.mjs'
  5. import { RateLimiter } from '../../infrastructure/RateLimiter.js'
  6. import RateLimiterMiddleware from '../Security/RateLimiterMiddleware.mjs'
  7. const rateLimiters = {
  8. createTeamInvite: new RateLimiter('create-team-invite', {
  9. points: 200,
  10. duration: 60,
  11. }),
  12. exportTeamCsv: new RateLimiter('export-team-csv', {
  13. points: 30,
  14. duration: 60,
  15. }),
  16. }
  17. export default {
  18. apply(webRouter) {
  19. // group members routes
  20. webRouter.get(
  21. '/manage/groups/:id/members',
  22. UserMembershipMiddleware.requireEntityAccessOrAdminAccess('group'),
  23. UserMembershipController.manageGroupMembers
  24. )
  25. webRouter.post(
  26. '/manage/groups/:id/invites',
  27. UserMembershipMiddleware.requireGroupMemberManagement('group'),
  28. RateLimiterMiddleware.rateLimit(rateLimiters.createTeamInvite),
  29. TeamInvitesController.createInvite
  30. )
  31. webRouter.post(
  32. '/manage/groups/:id/resendInvite',
  33. UserMembershipMiddleware.requireGroupMemberManagement('group'),
  34. RateLimiterMiddleware.rateLimit(rateLimiters.createTeamInvite),
  35. TeamInvitesController.resendInvite
  36. )
  37. webRouter.delete(
  38. '/manage/groups/:id/user/:user_id',
  39. UserMembershipMiddleware.requireGroupMemberManagement('group'),
  40. SubscriptionGroupController.removeUserFromGroup
  41. )
  42. webRouter.delete(
  43. '/manage/groups/:id/invites/:email',
  44. UserMembershipMiddleware.requireGroupMemberManagement('group'),
  45. TeamInvitesController.revokeInvite
  46. )
  47. webRouter.get(
  48. '/manage/groups/:id/members/export',
  49. UserMembershipMiddleware.requireEntityAccessOrAdminAccess('group'),
  50. RateLimiterMiddleware.rateLimit(rateLimiters.exportTeamCsv),
  51. UserMembershipController.exportCsv
  52. )
  53. // group managers routes
  54. webRouter.get(
  55. '/manage/groups/:id/managers',
  56. UserMembershipMiddleware.requireEntityAccess({
  57. entityName: 'groupManagers',
  58. staffAccess: 'groupManagement',
  59. adminCapability: 'view-group-manager',
  60. }),
  61. UserMembershipController.manageGroupManagers
  62. )
  63. webRouter.post(
  64. '/manage/groups/:id/managers',
  65. UserMembershipMiddleware.requireEntityAccess({
  66. entityName: 'groupManagers',
  67. staffAccess: 'groupManagement',
  68. adminCapability: 'modify-group-manager',
  69. }),
  70. UserMembershipController.add
  71. )
  72. webRouter.delete(
  73. '/manage/groups/:id/managers/:userId',
  74. UserMembershipMiddleware.requireEntityAccess({
  75. entityName: 'groupManagers',
  76. staffAccess: 'groupManagement',
  77. adminCapability: 'modify-group-manager',
  78. }),
  79. UserMembershipController.remove
  80. )
  81. // institution members routes
  82. webRouter.get(
  83. '/manage/institutions/:id/managers',
  84. UserMembershipMiddleware.requireInstitutionManagementAccess,
  85. UserMembershipController.manageInstitutionManagers
  86. )
  87. webRouter.post(
  88. '/manage/institutions/:id/managers',
  89. UserMembershipMiddleware.requireInstitutionManagementAccess,
  90. UserMembershipController.add
  91. )
  92. webRouter.delete(
  93. '/manage/institutions/:id/managers/:userId',
  94. UserMembershipMiddleware.requireInstitutionManagementAccess,
  95. UserMembershipController.remove
  96. )
  97. // publisher members routes
  98. webRouter.get(
  99. '/manage/publishers/:id/managers',
  100. UserMembershipMiddleware.requirePublisherManagementAccess,
  101. UserMembershipController.managePublisherManagers
  102. )
  103. webRouter.post(
  104. '/manage/publishers/:id/managers',
  105. UserMembershipMiddleware.requirePublisherManagementAccess,
  106. UserMembershipController.add
  107. )
  108. webRouter.delete(
  109. '/manage/publishers/:id/managers/:userId',
  110. UserMembershipMiddleware.requirePublisherManagementAccess,
  111. UserMembershipController.remove
  112. )
  113. // publisher creation routes
  114. webRouter.get(
  115. '/entities/publisher/create/:id',
  116. UserMembershipMiddleware.requirePublisherCreationAccess,
  117. UserMembershipController.new
  118. )
  119. webRouter.post(
  120. '/entities/publisher/create/:id',
  121. UserMembershipMiddleware.requirePublisherCreationAccess,
  122. UserMembershipController.create
  123. )
  124. // institution creation routes
  125. webRouter.get(
  126. '/entities/institution/create/:id',
  127. UserMembershipMiddleware.requireInstitutionCreationAccess,
  128. UserMembershipController.new
  129. )
  130. webRouter.post(
  131. '/entities/institution/create/:id',
  132. UserMembershipMiddleware.requireInstitutionCreationAccess,
  133. UserMembershipController.create
  134. )
  135. },
  136. }