@webiny/api-aco 6.3.0 → 6.4.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) hide show
  1. package/constants.js +2 -1
  2. package/constants.js.map +1 -1
  3. package/createAcoContext.d.ts +1 -1
  4. package/createAcoContext.js +75 -103
  5. package/createAcoContext.js.map +1 -1
  6. package/createAcoGraphQL.js +42 -43
  7. package/createAcoGraphQL.js.map +1 -1
  8. package/createAcoStorageOperations.js +5 -6
  9. package/createAcoStorageOperations.js.map +1 -1
  10. package/createAcoTasks.js +7 -8
  11. package/createAcoTasks.js.map +1 -1
  12. package/domain/folder/abstractions.js +2 -5
  13. package/domain/folder/abstractions.js.map +1 -1
  14. package/domain/folder/errors.js +42 -47
  15. package/domain/folder/errors.js.map +1 -1
  16. package/domain/folder/folder.model.js +52 -36
  17. package/domain/folder/folder.model.js.map +1 -1
  18. package/exports/api/aco/flp.js +0 -2
  19. package/exports/api/aco/folder.js +4 -6
  20. package/features/cms/decorators/CreateEntryRevisionFromWithFlpDecorator.js +27 -31
  21. package/features/cms/decorators/CreateEntryRevisionFromWithFlpDecorator.js.map +1 -1
  22. package/features/cms/decorators/CreateEntryWithFlpDecorator.js +22 -25
  23. package/features/cms/decorators/CreateEntryWithFlpDecorator.js.map +1 -1
  24. package/features/cms/decorators/DeleteEntryRevisionWithFlpDecorator.js +27 -31
  25. package/features/cms/decorators/DeleteEntryRevisionWithFlpDecorator.js.map +1 -1
  26. package/features/cms/decorators/DeleteEntryWithFlpDecorator.js +29 -33
  27. package/features/cms/decorators/DeleteEntryWithFlpDecorator.js.map +1 -1
  28. package/features/cms/decorators/GetEntryByIdWithFlpDecorator.js +25 -30
  29. package/features/cms/decorators/GetEntryByIdWithFlpDecorator.js.map +1 -1
  30. package/features/cms/decorators/GetEntryWithFlpDecorator.js +25 -30
  31. package/features/cms/decorators/GetEntryWithFlpDecorator.js.map +1 -1
  32. package/features/cms/decorators/GetLatestEntriesByIdsWithFlpDecorator.js +31 -35
  33. package/features/cms/decorators/GetLatestEntriesByIdsWithFlpDecorator.js.map +1 -1
  34. package/features/cms/decorators/GetPublishedEntriesByIdsWithFlpDecorator.js +31 -34
  35. package/features/cms/decorators/GetPublishedEntriesByIdsWithFlpDecorator.js.map +1 -1
  36. package/features/cms/decorators/ListDeletedEntriesWithFlpDecorator.js +27 -28
  37. package/features/cms/decorators/ListDeletedEntriesWithFlpDecorator.js.map +1 -1
  38. package/features/cms/decorators/ListEntriesWithFlpDecorator.js +27 -27
  39. package/features/cms/decorators/ListEntriesWithFlpDecorator.js.map +1 -1
  40. package/features/cms/decorators/ListLatestEntriesWithFlpDecorator.js +27 -28
  41. package/features/cms/decorators/ListLatestEntriesWithFlpDecorator.js.map +1 -1
  42. package/features/cms/decorators/ListPublishedEntriesWithFlpDecorator.js +27 -28
  43. package/features/cms/decorators/ListPublishedEntriesWithFlpDecorator.js.map +1 -1
  44. package/features/cms/decorators/MoveEntryWithFlpDecorator.js +37 -51
  45. package/features/cms/decorators/MoveEntryWithFlpDecorator.js.map +1 -1
  46. package/features/cms/decorators/UpdateEntryWithFlpDecorator.d.ts +1 -2
  47. package/features/cms/decorators/UpdateEntryWithFlpDecorator.js +27 -31
  48. package/features/cms/decorators/UpdateEntryWithFlpDecorator.js.map +1 -1
  49. package/features/cms/feature.js +19 -25
  50. package/features/cms/feature.js.map +1 -1
  51. package/features/cms/index.js +0 -2
  52. package/features/flp/CreateFlp/CreateFlpUseCase.js +26 -33
  53. package/features/flp/CreateFlp/CreateFlpUseCase.js.map +1 -1
  54. package/features/flp/CreateFlp/abstractions.js +2 -5
  55. package/features/flp/CreateFlp/abstractions.js.map +1 -1
  56. package/features/flp/CreateFlp/feature.js +7 -8
  57. package/features/flp/CreateFlp/feature.js.map +1 -1
  58. package/features/flp/CreateFlp/index.js +0 -2
  59. package/features/flp/CreateFlpOnFolderCreated/CreateFlpOnFolderCreatedHandler.js +27 -27
  60. package/features/flp/CreateFlpOnFolderCreated/CreateFlpOnFolderCreatedHandler.js.map +1 -1
  61. package/features/flp/CreateFlpOnFolderCreated/feature.js +6 -5
  62. package/features/flp/CreateFlpOnFolderCreated/feature.js.map +1 -1
  63. package/features/flp/CreateFlpOnFolderCreated/index.js +0 -2
  64. package/features/flp/DeleteFlp/DeleteFlpUseCase.js +17 -18
  65. package/features/flp/DeleteFlp/DeleteFlpUseCase.js.map +1 -1
  66. package/features/flp/DeleteFlp/abstractions.js +2 -5
  67. package/features/flp/DeleteFlp/abstractions.js.map +1 -1
  68. package/features/flp/DeleteFlp/feature.js +7 -8
  69. package/features/flp/DeleteFlp/feature.js.map +1 -1
  70. package/features/flp/DeleteFlp/index.js +0 -2
  71. package/features/flp/DeleteFlpOnFolderDeleted/DeleteFlpOnFolderDeletedHandler.js +27 -27
  72. package/features/flp/DeleteFlpOnFolderDeleted/DeleteFlpOnFolderDeletedHandler.js.map +1 -1
  73. package/features/flp/DeleteFlpOnFolderDeleted/feature.js +6 -5
  74. package/features/flp/DeleteFlpOnFolderDeleted/feature.js.map +1 -1
  75. package/features/flp/DeleteFlpOnFolderDeleted/index.js +0 -2
  76. package/features/flp/FolderLevelPermissions/FolderLevelPermissions.js +87 -108
  77. package/features/flp/FolderLevelPermissions/FolderLevelPermissions.js.map +1 -1
  78. package/features/flp/FolderLevelPermissions/abstractions.js +2 -2
  79. package/features/flp/FolderLevelPermissions/abstractions.js.map +1 -1
  80. package/features/flp/FolderLevelPermissions/feature.js +6 -5
  81. package/features/flp/FolderLevelPermissions/feature.js.map +1 -1
  82. package/features/flp/FolderLevelPermissions/index.js +0 -2
  83. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/CanAccessFolder.js +14 -36
  84. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/CanAccessFolder.js.map +1 -1
  85. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/ICanAccessFolder.js +0 -3
  86. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/index.js +0 -2
  87. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/CanAccessFolderContent.js +12 -29
  88. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/CanAccessFolderContent.js.map +1 -1
  89. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/ICanAccessFolderContent.js +0 -3
  90. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/index.js +0 -2
  91. package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/CanCreateFolderInRoot.js +5 -4
  92. package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/CanCreateFolderInRoot.js.map +1 -1
  93. package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/ICanCreateFolderInRoot.js +0 -3
  94. package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/index.js +0 -2
  95. package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/CheckNotInheritedPermissions.js +5 -4
  96. package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/CheckNotInheritedPermissions.js.map +1 -1
  97. package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/ICheckNotInheritedPermissions.js +0 -3
  98. package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/index.js +0 -2
  99. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/DefaultPermissionsMerger.js +43 -66
  100. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/DefaultPermissionsMerger.js.map +1 -1
  101. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissions.js +10 -9
  102. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissions.js.map +1 -1
  103. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissionsWithTeams.js +22 -33
  104. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissionsWithTeams.js.map +1 -1
  105. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/IGetDefaultPermissions.js +0 -3
  106. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/index.js +0 -2
  107. package/features/flp/FolderLevelPermissions/useCases/index.js +0 -2
  108. package/features/flp/GetFlp/GetFlpUseCase.js +8 -7
  109. package/features/flp/GetFlp/GetFlpUseCase.js.map +1 -1
  110. package/features/flp/GetFlp/abstractions.js +2 -2
  111. package/features/flp/GetFlp/abstractions.js.map +1 -1
  112. package/features/flp/GetFlp/feature.js +7 -8
  113. package/features/flp/GetFlp/feature.js.map +1 -1
  114. package/features/flp/GetFlp/index.js +0 -2
  115. package/features/flp/ListFlps/ListFlpsUseCase.js +8 -7
  116. package/features/flp/ListFlps/ListFlpsUseCase.js.map +1 -1
  117. package/features/flp/ListFlps/abstractions.js +2 -2
  118. package/features/flp/ListFlps/abstractions.js.map +1 -1
  119. package/features/flp/ListFlps/feature.js +7 -8
  120. package/features/flp/ListFlps/feature.js.map +1 -1
  121. package/features/flp/ListFlps/index.js +0 -2
  122. package/features/flp/UpdateFlp/UpdateFlpUseCase.js +133 -184
  123. package/features/flp/UpdateFlp/UpdateFlpUseCase.js.map +1 -1
  124. package/features/flp/UpdateFlp/abstractions.js +2 -5
  125. package/features/flp/UpdateFlp/abstractions.js.map +1 -1
  126. package/features/flp/UpdateFlp/feature.js +7 -8
  127. package/features/flp/UpdateFlp/feature.js.map +1 -1
  128. package/features/flp/UpdateFlp/index.js +0 -2
  129. package/features/flp/UpdateFlpOnFolderUpdated/UpdateFlpOnFolderUpdatedHandler.js +29 -29
  130. package/features/flp/UpdateFlpOnFolderUpdated/UpdateFlpOnFolderUpdatedHandler.js.map +1 -1
  131. package/features/flp/UpdateFlpOnFolderUpdated/feature.js +6 -5
  132. package/features/flp/UpdateFlpOnFolderUpdated/feature.js.map +1 -1
  133. package/features/flp/UpdateFlpOnFolderUpdated/index.js +0 -2
  134. package/features/folder/CreateFolder/CreateFolderRepository.js +67 -90
  135. package/features/folder/CreateFolder/CreateFolderRepository.js.map +1 -1
  136. package/features/folder/CreateFolder/CreateFolderUseCase.js +27 -30
  137. package/features/folder/CreateFolder/CreateFolderUseCase.js.map +1 -1
  138. package/features/folder/CreateFolder/abstractions.js +5 -22
  139. package/features/folder/CreateFolder/abstractions.js.map +1 -1
  140. package/features/folder/CreateFolder/decorators/CreateFolderWithFolderLevelPermissions.js +29 -34
  141. package/features/folder/CreateFolder/decorators/CreateFolderWithFolderLevelPermissions.js.map +1 -1
  142. package/features/folder/CreateFolder/events.js +16 -14
  143. package/features/folder/CreateFolder/events.js.map +1 -1
  144. package/features/folder/CreateFolder/feature.js +8 -7
  145. package/features/folder/CreateFolder/feature.js.map +1 -1
  146. package/features/folder/CreateFolder/index.js +1 -3
  147. package/features/folder/DeleteFolder/DeleteFolderRepository.js +22 -20
  148. package/features/folder/DeleteFolder/DeleteFolderRepository.js.map +1 -1
  149. package/features/folder/DeleteFolder/DeleteFolderUseCase.js +35 -43
  150. package/features/folder/DeleteFolder/DeleteFolderUseCase.js.map +1 -1
  151. package/features/folder/DeleteFolder/abstractions.js +5 -22
  152. package/features/folder/DeleteFolder/abstractions.js.map +1 -1
  153. package/features/folder/DeleteFolder/decorators/DeleteFolderWithFolderLevelPermissions.js +21 -20
  154. package/features/folder/DeleteFolder/decorators/DeleteFolderWithFolderLevelPermissions.js.map +1 -1
  155. package/features/folder/DeleteFolder/events.js +16 -14
  156. package/features/folder/DeleteFolder/events.js.map +1 -1
  157. package/features/folder/DeleteFolder/feature.js +8 -7
  158. package/features/folder/DeleteFolder/feature.js.map +1 -1
  159. package/features/folder/DeleteFolder/index.js +1 -3
  160. package/features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.js +43 -44
  161. package/features/folder/EnsureFolderIsEmpty/EnsureFolderIsEmpty.js.map +1 -1
  162. package/features/folder/EnsureFolderIsEmpty/abstractions.js +2 -2
  163. package/features/folder/EnsureFolderIsEmpty/abstractions.js.map +1 -1
  164. package/features/folder/EnsureFolderIsEmpty/feature.js +6 -5
  165. package/features/folder/EnsureFolderIsEmpty/feature.js.map +1 -1
  166. package/features/folder/EnsureFolderIsEmpty/index.js +0 -2
  167. package/features/folder/EnsureFolderIsEmptyOnDelete/GenericFolderBeforeDeleteHandler.js +16 -20
  168. package/features/folder/EnsureFolderIsEmptyOnDelete/GenericFolderBeforeDeleteHandler.js.map +1 -1
  169. package/features/folder/EnsureFolderIsEmptyOnDelete/feature.js +6 -12
  170. package/features/folder/EnsureFolderIsEmptyOnDelete/feature.js.map +1 -1
  171. package/features/folder/EnsureFolderIsEmptyOnDelete/index.js +0 -2
  172. package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.js +36 -44
  173. package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/ModelFolderBeforeDeleteHandler.js.map +1 -1
  174. package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/feature.js +6 -5
  175. package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/feature.js.map +1 -1
  176. package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/index.js +0 -2
  177. package/features/folder/GetAncestors/GetAncestorsRepository.js +45 -75
  178. package/features/folder/GetAncestors/GetAncestorsRepository.js.map +1 -1
  179. package/features/folder/GetAncestors/GetAncestorsUseCase.js +14 -11
  180. package/features/folder/GetAncestors/GetAncestorsUseCase.js.map +1 -1
  181. package/features/folder/GetAncestors/abstractions.js +3 -14
  182. package/features/folder/GetAncestors/abstractions.js.map +1 -1
  183. package/features/folder/GetAncestors/feature.js +7 -6
  184. package/features/folder/GetAncestors/feature.js.map +1 -1
  185. package/features/folder/GetAncestors/index.js +0 -2
  186. package/features/folder/GetFolder/GetFolderRepository.js +21 -19
  187. package/features/folder/GetFolder/GetFolderRepository.js.map +1 -1
  188. package/features/folder/GetFolder/GetFolderUseCase.js +14 -11
  189. package/features/folder/GetFolder/GetFolderUseCase.js.map +1 -1
  190. package/features/folder/GetFolder/abstractions.js +5 -21
  191. package/features/folder/GetFolder/abstractions.js.map +1 -1
  192. package/features/folder/GetFolder/decorators/GetFolderWithFolderLevelPermissions.js +23 -26
  193. package/features/folder/GetFolder/decorators/GetFolderWithFolderLevelPermissions.js.map +1 -1
  194. package/features/folder/GetFolder/feature.js +8 -7
  195. package/features/folder/GetFolder/feature.js.map +1 -1
  196. package/features/folder/GetFolder/index.js +0 -2
  197. package/features/folder/GetFolderHierarchy/GetFolderHierarchyRepository.js +67 -86
  198. package/features/folder/GetFolderHierarchy/GetFolderHierarchyRepository.js.map +1 -1
  199. package/features/folder/GetFolderHierarchy/GetFolderHierarchyUseCase.js +14 -11
  200. package/features/folder/GetFolderHierarchy/GetFolderHierarchyUseCase.js.map +1 -1
  201. package/features/folder/GetFolderHierarchy/abstractions.js +3 -14
  202. package/features/folder/GetFolderHierarchy/abstractions.js.map +1 -1
  203. package/features/folder/GetFolderHierarchy/decorators/GetFolderHierarchyWithFolderLevelPermissions.js +55 -56
  204. package/features/folder/GetFolderHierarchy/decorators/GetFolderHierarchyWithFolderLevelPermissions.js.map +1 -1
  205. package/features/folder/GetFolderHierarchy/feature.js +8 -7
  206. package/features/folder/GetFolderHierarchy/feature.js.map +1 -1
  207. package/features/folder/GetFolderHierarchy/index.js +0 -2
  208. package/features/folder/ListFolderLevelPermissionsTargets/ListFolderLevelPermissionsTargetsUseCase.js +65 -58
  209. package/features/folder/ListFolderLevelPermissionsTargets/ListFolderLevelPermissionsTargetsUseCase.js.map +1 -1
  210. package/features/folder/ListFolderLevelPermissionsTargets/abstractions.js +2 -5
  211. package/features/folder/ListFolderLevelPermissionsTargets/abstractions.js.map +1 -1
  212. package/features/folder/ListFolderLevelPermissionsTargets/feature.js +6 -5
  213. package/features/folder/ListFolderLevelPermissionsTargets/feature.js.map +1 -1
  214. package/features/folder/ListFolderLevelPermissionsTargets/index.js +0 -2
  215. package/features/folder/ListFolders/ListFoldersRepository.js +39 -41
  216. package/features/folder/ListFolders/ListFoldersRepository.js.map +1 -1
  217. package/features/folder/ListFolders/ListFoldersUseCase.js +14 -11
  218. package/features/folder/ListFolders/ListFoldersUseCase.js.map +1 -1
  219. package/features/folder/ListFolders/abstractions.js +3 -14
  220. package/features/folder/ListFolders/abstractions.js.map +1 -1
  221. package/features/folder/ListFolders/decorators/ListFoldersWithFolderLevelPermissions.js +55 -67
  222. package/features/folder/ListFolders/decorators/ListFoldersWithFolderLevelPermissions.js.map +1 -1
  223. package/features/folder/ListFolders/feature.js +8 -7
  224. package/features/folder/ListFolders/feature.js.map +1 -1
  225. package/features/folder/ListFolders/index.js +0 -2
  226. package/features/folder/UpdateFolder/UpdateFolderRepository.js +66 -92
  227. package/features/folder/UpdateFolder/UpdateFolderRepository.js.map +1 -1
  228. package/features/folder/UpdateFolder/UpdateFolderUseCase.js +38 -45
  229. package/features/folder/UpdateFolder/UpdateFolderUseCase.js.map +1 -1
  230. package/features/folder/UpdateFolder/abstractions.js +5 -22
  231. package/features/folder/UpdateFolder/abstractions.js.map +1 -1
  232. package/features/folder/UpdateFolder/decorators/UpdateFolderWithFolderLevelPermissions.js +45 -64
  233. package/features/folder/UpdateFolder/decorators/UpdateFolderWithFolderLevelPermissions.js.map +1 -1
  234. package/features/folder/UpdateFolder/events.js +16 -14
  235. package/features/folder/UpdateFolder/events.js.map +1 -1
  236. package/features/folder/UpdateFolder/feature.js +8 -7
  237. package/features/folder/UpdateFolder/feature.js.map +1 -1
  238. package/features/folder/UpdateFolder/index.js +0 -2
  239. package/features/folder/shared/EntryToFolderMapper.js +20 -19
  240. package/features/folder/shared/EntryToFolderMapper.js.map +1 -1
  241. package/features/folder/shared/abstractions.js +2 -2
  242. package/features/folder/shared/abstractions.js.map +1 -1
  243. package/filter/filter.crud.js +28 -31
  244. package/filter/filter.crud.js.map +1 -1
  245. package/filter/filter.gql.js +32 -48
  246. package/filter/filter.gql.js.map +1 -1
  247. package/filter/filter.model.js +44 -35
  248. package/filter/filter.model.js.map +1 -1
  249. package/filter/filter.so.js +73 -93
  250. package/filter/filter.so.js.map +1 -1
  251. package/filter/filter.types.js +5 -4
  252. package/filter/filter.types.js.map +1 -1
  253. package/flp/flp.crud.js +69 -86
  254. package/flp/flp.crud.js.map +1 -1
  255. package/flp/flp.so.js +162 -199
  256. package/flp/flp.so.js.map +1 -1
  257. package/flp/flp.types.js +0 -3
  258. package/flp/index.js +0 -2
  259. package/flp/tasks/createFlp.task.js +26 -27
  260. package/flp/tasks/createFlp.task.js.map +1 -1
  261. package/flp/tasks/deleteFlp.task.js +26 -27
  262. package/flp/tasks/deleteFlp.task.js.map +1 -1
  263. package/flp/tasks/index.js +13 -12
  264. package/flp/tasks/index.js.map +1 -1
  265. package/flp/tasks/syncFlp.task.js +83 -112
  266. package/flp/tasks/syncFlp.task.js.map +1 -1
  267. package/flp/tasks/updateFlp.task.js +33 -32
  268. package/flp/tasks/updateFlp.task.js.map +1 -1
  269. package/folder/createFolderModelModifier.js +50 -50
  270. package/folder/createFolderModelModifier.js.map +1 -1
  271. package/folder/createFolderTypeDefs.js +39 -50
  272. package/folder/createFolderTypeDefs.js.map +1 -1
  273. package/folder/folder.gql.js +100 -133
  274. package/folder/folder.gql.js.map +1 -1
  275. package/folder/folder.types.js +0 -3
  276. package/index.d.ts +1 -1
  277. package/index.js +7 -4
  278. package/index.js.map +1 -1
  279. package/package.json +25 -25
  280. package/types.js +5 -4
  281. package/types.js.map +1 -1
  282. package/utils/FoldersCacheFactory.js +20 -19
  283. package/utils/FoldersCacheFactory.js.map +1 -1
  284. package/utils/ListCache.js +20 -19
  285. package/utils/ListCache.js.map +1 -1
  286. package/utils/Path.js +5 -6
  287. package/utils/Path.js.map +1 -1
  288. package/utils/compress.js +8 -7
  289. package/utils/compress.js.map +1 -1
  290. package/utils/createListSort.js +4 -7
  291. package/utils/createListSort.js.map +1 -1
  292. package/utils/createOperationsWrapper.js +12 -19
  293. package/utils/createOperationsWrapper.js.map +1 -1
  294. package/utils/decorators/CmsEntriesCrudDecorators.js +165 -196
  295. package/utils/decorators/CmsEntriesCrudDecorators.js.map +1 -1
  296. package/utils/decorators/FilterEntriesByFolderFactory.js +18 -19
  297. package/utils/decorators/FilterEntriesByFolderFactory.js.map +1 -1
  298. package/utils/decorators/ListEntriesFactory.js +65 -98
  299. package/utils/decorators/ListEntriesFactory.js.map +1 -1
  300. package/utils/decorators/hasRootFolderId.js +6 -12
  301. package/utils/decorators/hasRootFolderId.js.map +1 -1
  302. package/utils/decorators/isPageModel.js +5 -10
  303. package/utils/decorators/isPageModel.js.map +1 -1
  304. package/utils/ensureAuthentication.js +6 -7
  305. package/utils/ensureAuthentication.js.map +1 -1
  306. package/utils/pickEntryFieldValues.js +24 -18
  307. package/utils/pickEntryFieldValues.js.map +1 -1
  308. package/utils/resolve.js +7 -6
  309. package/utils/resolve.js.map +1 -1
  310. package/exports/api/aco/flp.js.map +0 -1
  311. package/exports/api/aco/folder.js.map +0 -1
  312. package/features/cms/index.js.map +0 -1
  313. package/features/flp/CreateFlp/index.js.map +0 -1
  314. package/features/flp/CreateFlpOnFolderCreated/index.js.map +0 -1
  315. package/features/flp/DeleteFlp/index.js.map +0 -1
  316. package/features/flp/DeleteFlpOnFolderDeleted/index.js.map +0 -1
  317. package/features/flp/FolderLevelPermissions/index.js.map +0 -1
  318. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/ICanAccessFolder.js.map +0 -1
  319. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/index.js.map +0 -1
  320. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/ICanAccessFolderContent.js.map +0 -1
  321. package/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/index.js.map +0 -1
  322. package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/ICanCreateFolderInRoot.js.map +0 -1
  323. package/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/index.js.map +0 -1
  324. package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/ICheckNotInheritedPermissions.js.map +0 -1
  325. package/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/index.js.map +0 -1
  326. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/IGetDefaultPermissions.js.map +0 -1
  327. package/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/index.js.map +0 -1
  328. package/features/flp/FolderLevelPermissions/useCases/index.js.map +0 -1
  329. package/features/flp/GetFlp/index.js.map +0 -1
  330. package/features/flp/ListFlps/index.js.map +0 -1
  331. package/features/flp/UpdateFlp/index.js.map +0 -1
  332. package/features/flp/UpdateFlpOnFolderUpdated/index.js.map +0 -1
  333. package/features/folder/CreateFolder/index.js.map +0 -1
  334. package/features/folder/DeleteFolder/index.js.map +0 -1
  335. package/features/folder/EnsureFolderIsEmpty/index.js.map +0 -1
  336. package/features/folder/EnsureFolderIsEmptyOnDelete/index.js.map +0 -1
  337. package/features/folder/EnsureHcmsFolderIsEmptyOnDelete/index.js.map +0 -1
  338. package/features/folder/GetAncestors/index.js.map +0 -1
  339. package/features/folder/GetFolder/index.js.map +0 -1
  340. package/features/folder/GetFolderHierarchy/index.js.map +0 -1
  341. package/features/folder/ListFolderLevelPermissionsTargets/index.js.map +0 -1
  342. package/features/folder/ListFolders/index.js.map +0 -1
  343. package/features/folder/UpdateFolder/index.js.map +0 -1
  344. package/flp/flp.types.js.map +0 -1
  345. package/flp/index.js.map +0 -1
  346. package/folder/folder.types.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["createImplementation","IdentityContext","WcpContext","ListUserTeamsUseCase","NotAuthorizedError","CanAccessFolder","CanAccessFolderContent","CanCreateFolderInRoot","CheckNotInheritedPermissions","GetDefaultPermissions","GetDefaultPermissionsWithTeams","FolderLevelPermissions","FolderLevelPermissionsAbstraction","ListFlpsUseCase","GetFlpUseCase","FolderLevelPermissionsImpl","constructor","identityContext","wcpContext","listUserTeamsUseCase","getFlpUseCase","listFlpsUseCase","canUseFolderLevelPermissions","enabled","identity","getIdentity","type","canUseTeams","canCreateFolderInRoot","canCreateFolderInRootUseCase","execute","permissionsIncludeNonInheritedPermissions","permissions","checkNotInheritedPermissionsUseCase","canAccessFolder","params","isAuthorizationEnabled","canAccessFolderUseCase","canAccessFolderContent","canUseFlp","authEnabled","canAccessFolderContentUseCase","ensureCanAccessFolder","result","ensureCanAccessFolderContent","canManageFolderContent","flp","rwd","canManageFolderStructure","canManageFolderPermissions","managePermissions","getDefaultPermissions","getDefaultPermissionsUseCase","getDefaultPermissionsWithTeams","listFolderLevelPermissions","flps","Promise","all","map","id","getFolderLevelPermissions","abstraction","implementation","dependencies"],"sources":["FolderLevelPermissions.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/di\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { WcpContext } from \"@webiny/api-core/features/wcp/WcpContext/index.js\";\nimport { ListUserTeamsUseCase } from \"@webiny/api-core/features/users/ListUserTeams/index.js\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/index.js\";\nimport {\n CanAccessFolder,\n CanAccessFolderContent,\n type CanAccessFolderContentParams,\n type CanAccessFolderParams,\n CanCreateFolderInRoot,\n CheckNotInheritedPermissions,\n GetDefaultPermissions,\n GetDefaultPermissionsWithTeams\n} from \"./useCases/index.js\";\nimport { FolderLevelPermissions as FolderLevelPermissionsAbstraction } from \"./abstractions.js\";\nimport type { FolderLevelPermission, FolderPermission, ListFlpsParams } from \"~/types.js\";\nimport { ListFlpsUseCase } from \"~/features/flp/ListFlps/index.js\";\nimport { GetFlpUseCase } from \"~/features/flp/GetFlp/index.js\";\n\nclass FolderLevelPermissionsImpl implements FolderLevelPermissionsAbstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private wcpContext: WcpContext.Interface,\n private listUserTeamsUseCase: ListUserTeamsUseCase.Interface,\n private getFlpUseCase: GetFlpUseCase.Interface,\n private listFlpsUseCase: ListFlpsUseCase.Interface\n ) {}\n\n public canUseFolderLevelPermissions(enabled?: boolean): boolean {\n if (enabled === false) {\n return false;\n }\n\n const identity = this.identityContext.getIdentity();\n\n // FLPs only work with authenticated identities (logged-in users).\n if (!identity) {\n return false;\n }\n\n // At the moment, we only want FLP to be used with identities of type \"admin\".\n // This temporarily addresses the issue of API keys not being able to access content, because\n // FLPs doesn't work with them. Once we start adding FLPs to API keys, we can remove this check.\n if (identity.type !== \"admin\") {\n return false;\n }\n\n return this.wcpContext.canUseFolderLevelPermissions();\n }\n\n public canUseTeams(): boolean {\n return this.wcpContext.canUseTeams();\n }\n\n public canCreateFolderInRoot(): boolean {\n const canCreateFolderInRootUseCase = new CanCreateFolderInRoot();\n return canCreateFolderInRootUseCase.execute();\n }\n\n public permissionsIncludeNonInheritedPermissions(permissions: FolderPermission[]): boolean {\n const checkNotInheritedPermissionsUseCase = new CheckNotInheritedPermissions();\n return checkNotInheritedPermissionsUseCase.execute(permissions);\n }\n\n public async canAccessFolder(params: CanAccessFolderParams): Promise<boolean> {\n if (\n !this.canUseFolderLevelPermissions() ||\n !this.identityContext.isAuthorizationEnabled()\n ) {\n return true;\n }\n\n const canAccessFolderUseCase = new CanAccessFolder(this.identityContext);\n return await canAccessFolderUseCase.execute(params);\n }\n\n public async canAccessFolderContent(params: CanAccessFolderContentParams): Promise<boolean> {\n const canUseFlp = this.canUseFolderLevelPermissions();\n const authEnabled = this.identityContext.isAuthorizationEnabled();\n\n if (!canUseFlp || !authEnabled) {\n return true;\n }\n\n const canAccessFolderContentUseCase = new CanAccessFolderContent(this.identityContext);\n return await canAccessFolderContentUseCase.execute(params);\n }\n\n public async ensureCanAccessFolder(params: CanAccessFolderParams): Promise<void> {\n const result = await this.canAccessFolder(params);\n if (!result) {\n throw new NotAuthorizedError();\n }\n }\n\n public async ensureCanAccessFolderContent(params: CanAccessFolderContentParams): Promise<void> {\n const result = await this.canAccessFolderContent(params);\n if (!result) {\n throw new NotAuthorizedError();\n }\n }\n\n public async canManageFolderContent(flp: FolderLevelPermission): Promise<boolean> {\n if (\n !this.canUseFolderLevelPermissions() ||\n !this.identityContext.isAuthorizationEnabled()\n ) {\n return true;\n }\n\n return await this.canAccessFolderContent({ permissions: flp.permissions, rwd: \"w\" });\n }\n\n public async canManageFolderStructure(flp: FolderLevelPermission): Promise<boolean> {\n if (\n !this.canUseFolderLevelPermissions() ||\n !this.identityContext.isAuthorizationEnabled()\n ) {\n return true;\n }\n\n return await this.canAccessFolder({ permissions: flp.permissions, rwd: \"w\" });\n }\n\n public async canManageFolderPermissions(flp: FolderLevelPermission): Promise<boolean> {\n if (!this.canUseFolderLevelPermissions()) {\n return false;\n }\n\n if (!this.identityContext.isAuthorizationEnabled()) {\n return true;\n }\n\n return await this.canAccessFolder({\n permissions: flp.permissions,\n rwd: \"w\",\n managePermissions: true\n });\n }\n\n public getDefaultPermissions(permissions: FolderPermission[]): Promise<FolderPermission[]> {\n const getDefaultPermissionsUseCase = new GetDefaultPermissions(this.identityContext);\n\n if (this.canUseTeams()) {\n const getDefaultPermissionsWithTeams = new GetDefaultPermissionsWithTeams(\n this.identityContext,\n this.listUserTeamsUseCase,\n getDefaultPermissionsUseCase\n );\n\n return getDefaultPermissionsWithTeams.execute(permissions);\n }\n\n return getDefaultPermissionsUseCase.execute(permissions);\n }\n\n public async listFolderLevelPermissions(params: ListFlpsParams): Promise<\n Array<{\n id: string;\n permissions: FolderPermission[];\n }>\n > {\n const flps = await this.listFlpsUseCase.execute(params);\n\n return Promise.all(\n flps.map(async flp => ({\n id: flp.id,\n permissions: await this.getDefaultPermissions(flp.permissions)\n }))\n );\n }\n\n public async getFolderLevelPermissions(id: string): Promise<FolderPermission[]> {\n const flp = await this.getFlpUseCase.execute(id);\n return await this.getDefaultPermissions(flp?.permissions ?? []);\n }\n}\n\nexport const FolderLevelPermissions = createImplementation({\n abstraction: FolderLevelPermissionsAbstraction,\n implementation: FolderLevelPermissionsImpl,\n dependencies: [\n IdentityContext,\n WcpContext,\n ListUserTeamsUseCase,\n GetFlpUseCase,\n ListFlpsUseCase\n ]\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"features/flp/FolderLevelPermissions/FolderLevelPermissions.js","sources":["../../../../src/features/flp/FolderLevelPermissions/FolderLevelPermissions.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/di\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { WcpContext } from \"@webiny/api-core/features/wcp/WcpContext/index.js\";\nimport { ListUserTeamsUseCase } from \"@webiny/api-core/features/users/ListUserTeams/index.js\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/index.js\";\nimport {\n CanAccessFolder,\n CanAccessFolderContent,\n type CanAccessFolderContentParams,\n type CanAccessFolderParams,\n CanCreateFolderInRoot,\n CheckNotInheritedPermissions,\n GetDefaultPermissions,\n GetDefaultPermissionsWithTeams\n} from \"./useCases/index.js\";\nimport { FolderLevelPermissions as FolderLevelPermissionsAbstraction } from \"./abstractions.js\";\nimport type { FolderLevelPermission, FolderPermission, ListFlpsParams } from \"~/types.js\";\nimport { ListFlpsUseCase } from \"~/features/flp/ListFlps/index.js\";\nimport { GetFlpUseCase } from \"~/features/flp/GetFlp/index.js\";\n\nclass FolderLevelPermissionsImpl implements FolderLevelPermissionsAbstraction.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private wcpContext: WcpContext.Interface,\n private listUserTeamsUseCase: ListUserTeamsUseCase.Interface,\n private getFlpUseCase: GetFlpUseCase.Interface,\n private listFlpsUseCase: ListFlpsUseCase.Interface\n ) {}\n\n public canUseFolderLevelPermissions(enabled?: boolean): boolean {\n if (enabled === false) {\n return false;\n }\n\n const identity = this.identityContext.getIdentity();\n\n // FLPs only work with authenticated identities (logged-in users).\n if (!identity) {\n return false;\n }\n\n // At the moment, we only want FLP to be used with identities of type \"admin\".\n // This temporarily addresses the issue of API keys not being able to access content, because\n // FLPs doesn't work with them. Once we start adding FLPs to API keys, we can remove this check.\n if (identity.type !== \"admin\") {\n return false;\n }\n\n return this.wcpContext.canUseFolderLevelPermissions();\n }\n\n public canUseTeams(): boolean {\n return this.wcpContext.canUseTeams();\n }\n\n public canCreateFolderInRoot(): boolean {\n const canCreateFolderInRootUseCase = new CanCreateFolderInRoot();\n return canCreateFolderInRootUseCase.execute();\n }\n\n public permissionsIncludeNonInheritedPermissions(permissions: FolderPermission[]): boolean {\n const checkNotInheritedPermissionsUseCase = new CheckNotInheritedPermissions();\n return checkNotInheritedPermissionsUseCase.execute(permissions);\n }\n\n public async canAccessFolder(params: CanAccessFolderParams): Promise<boolean> {\n if (\n !this.canUseFolderLevelPermissions() ||\n !this.identityContext.isAuthorizationEnabled()\n ) {\n return true;\n }\n\n const canAccessFolderUseCase = new CanAccessFolder(this.identityContext);\n return await canAccessFolderUseCase.execute(params);\n }\n\n public async canAccessFolderContent(params: CanAccessFolderContentParams): Promise<boolean> {\n const canUseFlp = this.canUseFolderLevelPermissions();\n const authEnabled = this.identityContext.isAuthorizationEnabled();\n\n if (!canUseFlp || !authEnabled) {\n return true;\n }\n\n const canAccessFolderContentUseCase = new CanAccessFolderContent(this.identityContext);\n return await canAccessFolderContentUseCase.execute(params);\n }\n\n public async ensureCanAccessFolder(params: CanAccessFolderParams): Promise<void> {\n const result = await this.canAccessFolder(params);\n if (!result) {\n throw new NotAuthorizedError();\n }\n }\n\n public async ensureCanAccessFolderContent(params: CanAccessFolderContentParams): Promise<void> {\n const result = await this.canAccessFolderContent(params);\n if (!result) {\n throw new NotAuthorizedError();\n }\n }\n\n public async canManageFolderContent(flp: FolderLevelPermission): Promise<boolean> {\n if (\n !this.canUseFolderLevelPermissions() ||\n !this.identityContext.isAuthorizationEnabled()\n ) {\n return true;\n }\n\n return await this.canAccessFolderContent({ permissions: flp.permissions, rwd: \"w\" });\n }\n\n public async canManageFolderStructure(flp: FolderLevelPermission): Promise<boolean> {\n if (\n !this.canUseFolderLevelPermissions() ||\n !this.identityContext.isAuthorizationEnabled()\n ) {\n return true;\n }\n\n return await this.canAccessFolder({ permissions: flp.permissions, rwd: \"w\" });\n }\n\n public async canManageFolderPermissions(flp: FolderLevelPermission): Promise<boolean> {\n if (!this.canUseFolderLevelPermissions()) {\n return false;\n }\n\n if (!this.identityContext.isAuthorizationEnabled()) {\n return true;\n }\n\n return await this.canAccessFolder({\n permissions: flp.permissions,\n rwd: \"w\",\n managePermissions: true\n });\n }\n\n public getDefaultPermissions(permissions: FolderPermission[]): Promise<FolderPermission[]> {\n const getDefaultPermissionsUseCase = new GetDefaultPermissions(this.identityContext);\n\n if (this.canUseTeams()) {\n const getDefaultPermissionsWithTeams = new GetDefaultPermissionsWithTeams(\n this.identityContext,\n this.listUserTeamsUseCase,\n getDefaultPermissionsUseCase\n );\n\n return getDefaultPermissionsWithTeams.execute(permissions);\n }\n\n return getDefaultPermissionsUseCase.execute(permissions);\n }\n\n public async listFolderLevelPermissions(params: ListFlpsParams): Promise<\n Array<{\n id: string;\n permissions: FolderPermission[];\n }>\n > {\n const flps = await this.listFlpsUseCase.execute(params);\n\n return Promise.all(\n flps.map(async flp => ({\n id: flp.id,\n permissions: await this.getDefaultPermissions(flp.permissions)\n }))\n );\n }\n\n public async getFolderLevelPermissions(id: string): Promise<FolderPermission[]> {\n const flp = await this.getFlpUseCase.execute(id);\n return await this.getDefaultPermissions(flp?.permissions ?? []);\n }\n}\n\nexport const FolderLevelPermissions = createImplementation({\n abstraction: FolderLevelPermissionsAbstraction,\n implementation: FolderLevelPermissionsImpl,\n dependencies: [\n IdentityContext,\n WcpContext,\n ListUserTeamsUseCase,\n GetFlpUseCase,\n ListFlpsUseCase\n ]\n});\n"],"names":["FolderLevelPermissionsImpl","identityContext","wcpContext","listUserTeamsUseCase","getFlpUseCase","listFlpsUseCase","enabled","identity","canCreateFolderInRootUseCase","CanCreateFolderInRoot","permissions","checkNotInheritedPermissionsUseCase","CheckNotInheritedPermissions","params","canAccessFolderUseCase","CanAccessFolder","canUseFlp","authEnabled","canAccessFolderContentUseCase","CanAccessFolderContent","result","NotAuthorizedError","flp","getDefaultPermissionsUseCase","GetDefaultPermissions","getDefaultPermissionsWithTeams","GetDefaultPermissionsWithTeams","flps","Promise","id","FolderLevelPermissions","createImplementation","FolderLevelPermissionsAbstraction","IdentityContext","WcpContext","ListUserTeamsUseCase","GetFlpUseCase","ListFlpsUseCase"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { createAbstraction } from "@webiny/feature/api";
2
- /** Manage folder-level access control. */
3
- export const FolderLevelPermissions = createAbstraction("FolderLevelPermissions");
2
+ const FolderLevelPermissions = createAbstraction("FolderLevelPermissions");
3
+ export { FolderLevelPermissions };
4
4
 
5
5
  //# sourceMappingURL=abstractions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createAbstraction","FolderLevelPermissions"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { CanAccessFolderContentParams, CanAccessFolderParams } from \"./useCases/index.js\";\nimport type { FolderLevelPermission, FolderPermission, ListFlpsParams } from \"~/types.js\";\n\nexport interface IFolderLevelPermissions {\n canUseFolderLevelPermissions(enabled?: boolean): boolean;\n canUseTeams(): boolean;\n canCreateFolderInRoot(): boolean;\n permissionsIncludeNonInheritedPermissions(permissions: FolderPermission[]): boolean;\n canAccessFolder(params: CanAccessFolderParams): Promise<boolean>;\n canAccessFolderContent(params: CanAccessFolderContentParams): Promise<boolean>;\n ensureCanAccessFolder(params: CanAccessFolderParams): Promise<void>;\n ensureCanAccessFolderContent(params: CanAccessFolderContentParams): Promise<void>;\n canManageFolderContent(flp: FolderLevelPermission): Promise<boolean>;\n canManageFolderStructure(flp: FolderLevelPermission): Promise<boolean>;\n canManageFolderPermissions(flp: FolderLevelPermission): Promise<boolean>;\n getDefaultPermissions(permissions: FolderPermission[]): Promise<FolderPermission[]>;\n listFolderLevelPermissions(params: ListFlpsParams): Promise<\n Array<{\n id: string;\n permissions: FolderPermission[];\n }>\n >;\n getFolderLevelPermissions(id: string): Promise<FolderPermission[]>;\n}\n\n/** Manage folder-level access control. */\nexport const FolderLevelPermissions =\n createAbstraction<IFolderLevelPermissions>(\"FolderLevelPermissions\");\n\nexport namespace FolderLevelPermissions {\n export type Interface = IFolderLevelPermissions;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AA0BvD;AACA,OAAO,MAAMC,sBAAsB,GAC/BD,iBAAiB,CAA0B,wBAAwB,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/flp/FolderLevelPermissions/abstractions.js","sources":["../../../../src/features/flp/FolderLevelPermissions/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { CanAccessFolderContentParams, CanAccessFolderParams } from \"./useCases/index.js\";\nimport type { FolderLevelPermission, FolderPermission, ListFlpsParams } from \"~/types.js\";\n\nexport interface IFolderLevelPermissions {\n canUseFolderLevelPermissions(enabled?: boolean): boolean;\n canUseTeams(): boolean;\n canCreateFolderInRoot(): boolean;\n permissionsIncludeNonInheritedPermissions(permissions: FolderPermission[]): boolean;\n canAccessFolder(params: CanAccessFolderParams): Promise<boolean>;\n canAccessFolderContent(params: CanAccessFolderContentParams): Promise<boolean>;\n ensureCanAccessFolder(params: CanAccessFolderParams): Promise<void>;\n ensureCanAccessFolderContent(params: CanAccessFolderContentParams): Promise<void>;\n canManageFolderContent(flp: FolderLevelPermission): Promise<boolean>;\n canManageFolderStructure(flp: FolderLevelPermission): Promise<boolean>;\n canManageFolderPermissions(flp: FolderLevelPermission): Promise<boolean>;\n getDefaultPermissions(permissions: FolderPermission[]): Promise<FolderPermission[]>;\n listFolderLevelPermissions(params: ListFlpsParams): Promise<\n Array<{\n id: string;\n permissions: FolderPermission[];\n }>\n >;\n getFolderLevelPermissions(id: string): Promise<FolderPermission[]>;\n}\n\n/** Manage folder-level access control. */\nexport const FolderLevelPermissions =\n createAbstraction<IFolderLevelPermissions>(\"FolderLevelPermissions\");\n\nexport namespace FolderLevelPermissions {\n export type Interface = IFolderLevelPermissions;\n}\n"],"names":["FolderLevelPermissions","createAbstraction"],"mappings":";AA2BO,MAAMA,yBACTC,kBAA2C"}
@@ -1,10 +1,11 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
2
  import { FolderLevelPermissions } from "./FolderLevelPermissions.js";
3
- export const FolderLevelPermissionsFeature = createFeature({
4
- name: "FolderLevelPermissions",
5
- register(container) {
6
- container.register(FolderLevelPermissions);
7
- }
3
+ const FolderLevelPermissionsFeature = createFeature({
4
+ name: "FolderLevelPermissions",
5
+ register (container) {
6
+ container.register(FolderLevelPermissions);
7
+ }
8
8
  });
9
+ export { FolderLevelPermissionsFeature };
9
10
 
10
11
  //# sourceMappingURL=feature.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createFeature","FolderLevelPermissions","FolderLevelPermissionsFeature","name","register","container"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport type { Container } from \"@webiny/di\";\nimport { FolderLevelPermissions } from \"./FolderLevelPermissions.js\";\n\nexport const FolderLevelPermissionsFeature = createFeature({\n name: \"FolderLevelPermissions\",\n register(container: Container) {\n container.register(FolderLevelPermissions);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AAEnD,SAASC,sBAAsB;AAE/B,OAAO,MAAMC,6BAA6B,GAAGF,aAAa,CAAC;EACvDG,IAAI,EAAE,wBAAwB;EAC9BC,QAAQA,CAACC,SAAoB,EAAE;IAC3BA,SAAS,CAACD,QAAQ,CAACH,sBAAsB,CAAC;EAC9C;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/flp/FolderLevelPermissions/feature.js","sources":["../../../../src/features/flp/FolderLevelPermissions/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport type { Container } from \"@webiny/di\";\nimport { FolderLevelPermissions } from \"./FolderLevelPermissions.js\";\n\nexport const FolderLevelPermissionsFeature = createFeature({\n name: \"FolderLevelPermissions\",\n register(container: Container) {\n container.register(FolderLevelPermissions);\n }\n});\n"],"names":["FolderLevelPermissionsFeature","createFeature","container","FolderLevelPermissions"],"mappings":";;AAIO,MAAMA,gCAAgCC,cAAc;IACvD,MAAM;IACN,UAASC,SAAoB;QACzBA,UAAU,QAAQ,CAACC;IACvB;AACJ"}
@@ -1,4 +1,2 @@
1
1
  export { FolderLevelPermissionsFeature } from "./feature.js";
2
2
  export { FolderLevelPermissions } from "./abstractions.js";
3
-
4
- //# sourceMappingURL=index.js.map
@@ -1,41 +1,19 @@
1
- export class CanAccessFolder {
2
- constructor(identityContext) {
3
- this.identityContext = identityContext;
4
- }
5
- async execute({
6
- permissions = [],
7
- rwd,
8
- managePermissions
9
- }) {
10
- if (!permissions.length) {
11
- return true;
1
+ class CanAccessFolder {
2
+ constructor(identityContext){
3
+ this.identityContext = identityContext;
12
4
  }
13
- const identity = this.identityContext.getIdentity();
14
- const currentIdentityPermission = permissions.find(p => {
15
- return p.target === `admin:${identity.id}`;
16
- });
17
- if (!currentIdentityPermission) {
18
- return false;
5
+ async execute({ permissions = [], rwd, managePermissions }) {
6
+ if (!permissions.length) return true;
7
+ const identity = this.identityContext.getIdentity();
8
+ const currentIdentityPermission = permissions.find((p)=>p.target === `admin:${identity.id}`);
9
+ if (!currentIdentityPermission) return false;
10
+ const { level } = currentIdentityPermission;
11
+ if (managePermissions) return "owner" === level;
12
+ if ("no-access" === level) return false;
13
+ if ("r" !== rwd) return "owner" === level || "editor" === level || "public" === level;
14
+ return true;
19
15
  }
20
- const {
21
- level
22
- } = currentIdentityPermission;
23
- if (managePermissions) {
24
- return level === "owner";
25
- }
26
-
27
- // If the user has a `no-access` level, they are explicitly denied access to the current folder.
28
- if (level === "no-access") {
29
- return false;
30
- }
31
-
32
- // Checking for "write" or "delete" access. Allow only if the
33
- // user is has `owner` or `editor` level or the folder is public (no FLP assigned).
34
- if (rwd !== "r") {
35
- return level === "owner" || level === "editor" || level === "public";
36
- }
37
- return true;
38
- }
39
16
  }
17
+ export { CanAccessFolder };
40
18
 
41
19
  //# sourceMappingURL=CanAccessFolder.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["CanAccessFolder","constructor","identityContext","execute","permissions","rwd","managePermissions","length","identity","getIdentity","currentIdentityPermission","find","p","target","id","level"],"sources":["CanAccessFolder.ts"],"sourcesContent":["import { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport type { CanAccessFolderParams, ICanAccessFolder } from \"./ICanAccessFolder.js\";\n\nexport class CanAccessFolder implements ICanAccessFolder {\n constructor(private identityContext: IdentityContext.Interface) {}\n\n async execute({ permissions = [], rwd, managePermissions }: CanAccessFolderParams) {\n if (!permissions.length) {\n return true;\n }\n\n const identity = this.identityContext.getIdentity();\n const currentIdentityPermission = permissions.find(p => {\n return p.target === `admin:${identity.id}`;\n });\n\n if (!currentIdentityPermission) {\n return false;\n }\n\n const { level } = currentIdentityPermission;\n\n if (managePermissions) {\n return level === \"owner\";\n }\n\n // If the user has a `no-access` level, they are explicitly denied access to the current folder.\n if (level === \"no-access\") {\n return false;\n }\n\n // Checking for \"write\" or \"delete\" access. Allow only if the\n // user is has `owner` or `editor` level or the folder is public (no FLP assigned).\n if (rwd !== \"r\") {\n return level === \"owner\" || level === \"editor\" || level === \"public\";\n }\n\n return true;\n }\n}\n"],"mappings":"AAGA,OAAO,MAAMA,eAAe,CAA6B;EACrDC,WAAWA,CAASC,eAA0C,EAAE;IAAA,KAA5CA,eAA0C,GAA1CA,eAA0C;EAAG;EAEjE,MAAMC,OAAOA,CAAC;IAAEC,WAAW,GAAG,EAAE;IAAEC,GAAG;IAAEC;EAAyC,CAAC,EAAE;IAC/E,IAAI,CAACF,WAAW,CAACG,MAAM,EAAE;MACrB,OAAO,IAAI;IACf;IAEA,MAAMC,QAAQ,GAAG,IAAI,CAACN,eAAe,CAACO,WAAW,CAAC,CAAC;IACnD,MAAMC,yBAAyB,GAAGN,WAAW,CAACO,IAAI,CAACC,CAAC,IAAI;MACpD,OAAOA,CAAC,CAACC,MAAM,KAAK,SAASL,QAAQ,CAACM,EAAE,EAAE;IAC9C,CAAC,CAAC;IAEF,IAAI,CAACJ,yBAAyB,EAAE;MAC5B,OAAO,KAAK;IAChB;IAEA,MAAM;MAAEK;IAAM,CAAC,GAAGL,yBAAyB;IAE3C,IAAIJ,iBAAiB,EAAE;MACnB,OAAOS,KAAK,KAAK,OAAO;IAC5B;;IAEA;IACA,IAAIA,KAAK,KAAK,WAAW,EAAE;MACvB,OAAO,KAAK;IAChB;;IAEA;IACA;IACA,IAAIV,GAAG,KAAK,GAAG,EAAE;MACb,OAAOU,KAAK,KAAK,OAAO,IAAIA,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,QAAQ;IACxE;IAEA,OAAO,IAAI;EACf;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"features/flp/FolderLevelPermissions/useCases/CanAccessFolder/CanAccessFolder.js","sources":["../../../../../../src/features/flp/FolderLevelPermissions/useCases/CanAccessFolder/CanAccessFolder.ts"],"sourcesContent":["import { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport type { CanAccessFolderParams, ICanAccessFolder } from \"./ICanAccessFolder.js\";\n\nexport class CanAccessFolder implements ICanAccessFolder {\n constructor(private identityContext: IdentityContext.Interface) {}\n\n async execute({ permissions = [], rwd, managePermissions }: CanAccessFolderParams) {\n if (!permissions.length) {\n return true;\n }\n\n const identity = this.identityContext.getIdentity();\n const currentIdentityPermission = permissions.find(p => {\n return p.target === `admin:${identity.id}`;\n });\n\n if (!currentIdentityPermission) {\n return false;\n }\n\n const { level } = currentIdentityPermission;\n\n if (managePermissions) {\n return level === \"owner\";\n }\n\n // If the user has a `no-access` level, they are explicitly denied access to the current folder.\n if (level === \"no-access\") {\n return false;\n }\n\n // Checking for \"write\" or \"delete\" access. Allow only if the\n // user is has `owner` or `editor` level or the folder is public (no FLP assigned).\n if (rwd !== \"r\") {\n return level === \"owner\" || level === \"editor\" || level === \"public\";\n }\n\n return true;\n }\n}\n"],"names":["CanAccessFolder","identityContext","permissions","rwd","managePermissions","identity","currentIdentityPermission","p","level"],"mappings":"AAGO,MAAMA;IACT,YAAoBC,eAA0C,CAAE;aAA5CA,eAAe,GAAfA;IAA6C;IAEjE,MAAM,QAAQ,EAAEC,cAAc,EAAE,EAAEC,GAAG,EAAEC,iBAAiB,EAAyB,EAAE;QAC/E,IAAI,CAACF,YAAY,MAAM,EACnB,OAAO;QAGX,MAAMG,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QACjD,MAAMC,4BAA4BJ,YAAY,IAAI,CAACK,CAAAA,IACxCA,EAAE,MAAM,KAAK,CAAC,MAAM,EAAEF,SAAS,EAAE,EAAE;QAG9C,IAAI,CAACC,2BACD,OAAO;QAGX,MAAM,EAAEE,KAAK,EAAE,GAAGF;QAElB,IAAIF,mBACA,OAAOI,AAAU,YAAVA;QAIX,IAAIA,AAAU,gBAAVA,OACA,OAAO;QAKX,IAAIL,AAAQ,QAARA,KACA,OAAOK,AAAU,YAAVA,SAAqBA,AAAU,aAAVA,SAAsBA,AAAU,aAAVA;QAGtD,OAAO;IACX;AACJ"}
@@ -1,3 +0,0 @@
1
- export {};
2
-
3
- //# sourceMappingURL=ICanAccessFolder.js.map
@@ -1,3 +1 @@
1
1
  export * from "./CanAccessFolder.js";
2
-
3
- //# sourceMappingURL=index.js.map
@@ -1,34 +1,17 @@
1
- export class CanAccessFolderContent {
2
- constructor(identityContext) {
3
- this.identityContext = identityContext;
4
- }
5
- async execute({
6
- permissions = [],
7
- rwd
8
- }) {
9
- const identity = this.identityContext.getIdentity();
10
- const currentIdentityPermission = permissions.find(p => {
11
- return p.target === `admin:${identity.id}`;
12
- });
13
- if (!currentIdentityPermission) {
14
- return false;
1
+ class CanAccessFolderContent {
2
+ constructor(identityContext){
3
+ this.identityContext = identityContext;
15
4
  }
16
- const {
17
- level
18
- } = currentIdentityPermission;
19
-
20
- // If the user has a `no-access` level, they are explicitly denied access to the current folder.
21
- if (level === "no-access") {
22
- return false;
23
- }
24
-
25
- // If the user is not an owner and we're checking for "write" or
26
- // "delete" access, then we can immediately return false.
27
- if (rwd !== "r") {
28
- return level !== "viewer";
5
+ async execute({ permissions = [], rwd }) {
6
+ const identity = this.identityContext.getIdentity();
7
+ const currentIdentityPermission = permissions.find((p)=>p.target === `admin:${identity.id}`);
8
+ if (!currentIdentityPermission) return false;
9
+ const { level } = currentIdentityPermission;
10
+ if ("no-access" === level) return false;
11
+ if ("r" !== rwd) return "viewer" !== level;
12
+ return true;
29
13
  }
30
- return true;
31
- }
32
14
  }
15
+ export { CanAccessFolderContent };
33
16
 
34
17
  //# sourceMappingURL=CanAccessFolderContent.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["CanAccessFolderContent","constructor","identityContext","execute","permissions","rwd","identity","getIdentity","currentIdentityPermission","find","p","target","id","level"],"sources":["CanAccessFolderContent.ts"],"sourcesContent":["import type { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport type {\n CanAccessFolderContentParams,\n ICanAccessFolderContent\n} from \"./ICanAccessFolderContent.js\";\n\nexport class CanAccessFolderContent implements ICanAccessFolderContent {\n constructor(private identityContext: IdentityContext.Interface) {}\n\n async execute({ permissions = [], rwd }: CanAccessFolderContentParams) {\n const identity = this.identityContext.getIdentity();\n\n const currentIdentityPermission = permissions.find(p => {\n return p.target === `admin:${identity.id}`;\n });\n\n if (!currentIdentityPermission) {\n return false;\n }\n\n const { level } = currentIdentityPermission;\n\n // If the user has a `no-access` level, they are explicitly denied access to the current folder.\n if (level === \"no-access\") {\n return false;\n }\n\n // If the user is not an owner and we're checking for \"write\" or\n // \"delete\" access, then we can immediately return false.\n if (rwd !== \"r\") {\n return level !== \"viewer\";\n }\n\n return true;\n }\n}\n"],"mappings":"AAMA,OAAO,MAAMA,sBAAsB,CAAoC;EACnEC,WAAWA,CAASC,eAA0C,EAAE;IAAA,KAA5CA,eAA0C,GAA1CA,eAA0C;EAAG;EAEjE,MAAMC,OAAOA,CAAC;IAAEC,WAAW,GAAG,EAAE;IAAEC;EAAkC,CAAC,EAAE;IACnE,MAAMC,QAAQ,GAAG,IAAI,CAACJ,eAAe,CAACK,WAAW,CAAC,CAAC;IAEnD,MAAMC,yBAAyB,GAAGJ,WAAW,CAACK,IAAI,CAACC,CAAC,IAAI;MACpD,OAAOA,CAAC,CAACC,MAAM,KAAK,SAASL,QAAQ,CAACM,EAAE,EAAE;IAC9C,CAAC,CAAC;IAEF,IAAI,CAACJ,yBAAyB,EAAE;MAC5B,OAAO,KAAK;IAChB;IAEA,MAAM;MAAEK;IAAM,CAAC,GAAGL,yBAAyB;;IAE3C;IACA,IAAIK,KAAK,KAAK,WAAW,EAAE;MACvB,OAAO,KAAK;IAChB;;IAEA;IACA;IACA,IAAIR,GAAG,KAAK,GAAG,EAAE;MACb,OAAOQ,KAAK,KAAK,QAAQ;IAC7B;IAEA,OAAO,IAAI;EACf;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/CanAccessFolderContent.js","sources":["../../../../../../src/features/flp/FolderLevelPermissions/useCases/CanAccessFolderContent/CanAccessFolderContent.ts"],"sourcesContent":["import type { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport type {\n CanAccessFolderContentParams,\n ICanAccessFolderContent\n} from \"./ICanAccessFolderContent.js\";\n\nexport class CanAccessFolderContent implements ICanAccessFolderContent {\n constructor(private identityContext: IdentityContext.Interface) {}\n\n async execute({ permissions = [], rwd }: CanAccessFolderContentParams) {\n const identity = this.identityContext.getIdentity();\n\n const currentIdentityPermission = permissions.find(p => {\n return p.target === `admin:${identity.id}`;\n });\n\n if (!currentIdentityPermission) {\n return false;\n }\n\n const { level } = currentIdentityPermission;\n\n // If the user has a `no-access` level, they are explicitly denied access to the current folder.\n if (level === \"no-access\") {\n return false;\n }\n\n // If the user is not an owner and we're checking for \"write\" or\n // \"delete\" access, then we can immediately return false.\n if (rwd !== \"r\") {\n return level !== \"viewer\";\n }\n\n return true;\n }\n}\n"],"names":["CanAccessFolderContent","identityContext","permissions","rwd","identity","currentIdentityPermission","p","level"],"mappings":"AAMO,MAAMA;IACT,YAAoBC,eAA0C,CAAE;aAA5CA,eAAe,GAAfA;IAA6C;IAEjE,MAAM,QAAQ,EAAEC,cAAc,EAAE,EAAEC,GAAG,EAAgC,EAAE;QACnE,MAAMC,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QAEjD,MAAMC,4BAA4BH,YAAY,IAAI,CAACI,CAAAA,IACxCA,EAAE,MAAM,KAAK,CAAC,MAAM,EAAEF,SAAS,EAAE,EAAE;QAG9C,IAAI,CAACC,2BACD,OAAO;QAGX,MAAM,EAAEE,KAAK,EAAE,GAAGF;QAGlB,IAAIE,AAAU,gBAAVA,OACA,OAAO;QAKX,IAAIJ,AAAQ,QAARA,KACA,OAAOI,AAAU,aAAVA;QAGX,OAAO;IACX;AACJ"}
@@ -1,3 +0,0 @@
1
- export {};
2
-
3
- //# sourceMappingURL=ICanAccessFolderContent.js.map
@@ -1,3 +1 @@
1
1
  export * from "./CanAccessFolderContent.js";
2
-
3
- //# sourceMappingURL=index.js.map
@@ -1,7 +1,8 @@
1
- export class CanCreateFolderInRoot {
2
- execute() {
3
- return true;
4
- }
1
+ class CanCreateFolderInRoot {
2
+ execute() {
3
+ return true;
4
+ }
5
5
  }
6
+ export { CanCreateFolderInRoot };
6
7
 
7
8
  //# sourceMappingURL=CanCreateFolderInRoot.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["CanCreateFolderInRoot","execute"],"sources":["CanCreateFolderInRoot.ts"],"sourcesContent":["import type { ICanCreateFolderInRoot } from \"./ICanCreateFolderInRoot.js\";\n\nexport class CanCreateFolderInRoot implements ICanCreateFolderInRoot {\n execute() {\n return true;\n }\n}\n"],"mappings":"AAEA,OAAO,MAAMA,qBAAqB,CAAmC;EACjEC,OAAOA,CAAA,EAAG;IACN,OAAO,IAAI;EACf;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/CanCreateFolderInRoot.js","sources":["../../../../../../src/features/flp/FolderLevelPermissions/useCases/CanCreateFolderInRoot/CanCreateFolderInRoot.ts"],"sourcesContent":["import type { ICanCreateFolderInRoot } from \"./ICanCreateFolderInRoot.js\";\n\nexport class CanCreateFolderInRoot implements ICanCreateFolderInRoot {\n execute() {\n return true;\n }\n}\n"],"names":["CanCreateFolderInRoot"],"mappings":"AAEO,MAAMA;IACT,UAAU;QACN,OAAO;IACX;AACJ"}
@@ -1,3 +0,0 @@
1
- export {};
2
-
3
- //# sourceMappingURL=ICanCreateFolderInRoot.js.map
@@ -1,3 +1 @@
1
1
  export * from "./CanCreateFolderInRoot.js";
2
-
3
- //# sourceMappingURL=index.js.map
@@ -1,7 +1,8 @@
1
- export class CheckNotInheritedPermissions {
2
- execute(permissions) {
3
- return permissions.some(p => !p.inheritedFrom);
4
- }
1
+ class CheckNotInheritedPermissions {
2
+ execute(permissions) {
3
+ return permissions.some((p)=>!p.inheritedFrom);
4
+ }
5
5
  }
6
+ export { CheckNotInheritedPermissions };
6
7
 
7
8
  //# sourceMappingURL=CheckNotInheritedPermissions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["CheckNotInheritedPermissions","execute","permissions","some","p","inheritedFrom"],"sources":["CheckNotInheritedPermissions.ts"],"sourcesContent":["import type { ICheckNotInheritedPermissions } from \"./ICheckNotInheritedPermissions.js\";\nimport type { FolderPermission } from \"~/flp/flp.types.js\";\n\nexport class CheckNotInheritedPermissions implements ICheckNotInheritedPermissions {\n execute(permissions: FolderPermission[]) {\n return permissions.some(p => !p.inheritedFrom);\n }\n}\n"],"mappings":"AAGA,OAAO,MAAMA,4BAA4B,CAA0C;EAC/EC,OAAOA,CAACC,WAA+B,EAAE;IACrC,OAAOA,WAAW,CAACC,IAAI,CAACC,CAAC,IAAI,CAACA,CAAC,CAACC,aAAa,CAAC;EAClD;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/CheckNotInheritedPermissions.js","sources":["../../../../../../src/features/flp/FolderLevelPermissions/useCases/CheckNotInheritedPermissions/CheckNotInheritedPermissions.ts"],"sourcesContent":["import type { ICheckNotInheritedPermissions } from \"./ICheckNotInheritedPermissions.js\";\nimport type { FolderPermission } from \"~/flp/flp.types.js\";\n\nexport class CheckNotInheritedPermissions implements ICheckNotInheritedPermissions {\n execute(permissions: FolderPermission[]) {\n return permissions.some(p => !p.inheritedFrom);\n }\n}\n"],"names":["CheckNotInheritedPermissions","permissions","p"],"mappings":"AAGO,MAAMA;IACT,QAAQC,WAA+B,EAAE;QACrC,OAAOA,YAAY,IAAI,CAACC,CAAAA,IAAK,CAACA,EAAE,aAAa;IACjD;AACJ"}
@@ -1,3 +0,0 @@
1
- export {};
2
-
3
- //# sourceMappingURL=ICheckNotInheritedPermissions.js.map
@@ -1,3 +1 @@
1
1
  export * from "./CheckNotInheritedPermissions.js";
2
-
3
- //# sourceMappingURL=index.js.map
@@ -1,70 +1,47 @@
1
- export class DefaultPermissionsMerger {
2
- static merge(identity, identityPermissions, folderPermissions) {
3
- // If the user has full access permission, add a specific "owner" permission to the list.
4
- // This ensures the user has complete control over the folder.
5
- const hasFullAccess = identityPermissions.some(p => p.name === "*");
6
- if (hasFullAccess) {
7
- return [{
8
- target: `admin:${identity.id}`,
9
- level: "owner",
10
- inheritedFrom: "role:full-access"
11
- },
12
- // Remove any permissions related to the full access user,
13
- // as these are always superseded by the "owner" permission defined above.
14
- ...folderPermissions.filter(p => p.target !== `admin:${identity.id}`)];
1
+ class DefaultPermissionsMerger {
2
+ static merge(identity, identityPermissions, folderPermissions) {
3
+ const hasFullAccess = identityPermissions.some((p)=>"*" === p.name);
4
+ if (hasFullAccess) return [
5
+ {
6
+ target: `admin:${identity.id}`,
7
+ level: "owner",
8
+ inheritedFrom: "role:full-access"
9
+ },
10
+ ...folderPermissions.filter((p)=>p.target !== `admin:${identity.id}`)
11
+ ];
12
+ if (0 === folderPermissions.length) return [
13
+ {
14
+ target: `admin:${identity.id}`,
15
+ level: "public",
16
+ inheritedFrom: "public"
17
+ }
18
+ ];
19
+ const currentAdminPermissions = folderPermissions.filter((p)=>p.target === `admin:${identity.id}`);
20
+ if (0 === currentAdminPermissions.length) return folderPermissions;
21
+ const noAccessPermission = currentAdminPermissions.find((p)=>"no-access" === p.level && p.target === `admin:${identity.id}`);
22
+ if (noAccessPermission) {
23
+ const filteredPermissions = folderPermissions.filter((p)=>p.target !== `admin:${identity.id}`);
24
+ return [
25
+ ...filteredPermissions,
26
+ noAccessPermission
27
+ ];
28
+ }
29
+ const [firstAdminPermission, ...restAdminPermissions] = currentAdminPermissions;
30
+ const resultPermission = restAdminPermissions.reduce((winner, current)=>{
31
+ const winnerInherits = winner.inheritedFrom?.startsWith("parent:");
32
+ const currentInherits = current.inheritedFrom?.startsWith("parent:");
33
+ if (winnerInherits && !currentInherits) return current;
34
+ if (currentInherits && !winnerInherits) return winner;
35
+ if ("owner" === current.level) return current;
36
+ if ("editor" === current.level && "viewer" === winner.level) return current;
37
+ return winner;
38
+ }, firstAdminPermission);
39
+ return [
40
+ resultPermission,
41
+ ...folderPermissions.filter((p)=>p.target !== `admin:${identity.id}`)
42
+ ];
15
43
  }
16
- if (folderPermissions.length === 0) {
17
- // No permissions provided. This means the folder is public.
18
- // Add a specific "public" permission to the list to ensure the folder is accessible to everyone.
19
- return [{
20
- target: `admin:${identity.id}`,
21
- level: "public",
22
- inheritedFrom: "public"
23
- }];
24
- }
25
-
26
- // If there are multiple `admin:${identity.id}` permissions in the array,
27
- // we need to pick the one with the highest access level. We also remove
28
- // other permissions for the same identity.
29
-
30
- // Get permissions related to the current identity (admin).
31
- const currentAdminPermissions = folderPermissions.filter(p => p.target === `admin:${identity.id}`);
32
- if (currentAdminPermissions.length === 0) {
33
- return folderPermissions;
34
- }
35
- const noAccessPermission = currentAdminPermissions.find(p => p.level === "no-access" && p.target === `admin:${identity.id}`);
36
- if (noAccessPermission) {
37
- // If one of the permissions is `no-access`, then we can immediately return it. This is
38
- // because `no-access` is the ultimate level of access, and no other permission can override it.
39
- // Remove all permissions for the current identity and add the winning one.
40
- const filteredPermissions = folderPermissions.filter(p => p.target !== `admin:${identity.id}`);
41
- return [...filteredPermissions, noAccessPermission];
42
- }
43
- const [firstAdminPermission, ...restAdminPermissions] = currentAdminPermissions;
44
- const resultPermission = restAdminPermissions.reduce((winner, current) => {
45
- const winnerInherits = winner.inheritedFrom?.startsWith("parent:");
46
- const currentInherits = current.inheritedFrom?.startsWith("parent:");
47
- if (winnerInherits && !currentInherits) {
48
- return current;
49
- }
50
- if (currentInherits && !winnerInherits) {
51
- return winner;
52
- }
53
-
54
- // At this point, we're either comparing two permissions with `inheritedFrom` or two without it.
55
- // In other words, we're now at a point where we start comparing the levels (owner > editor > viewer).
56
- if (current.level === "owner") {
57
- return current;
58
- }
59
- if (current.level === "editor" && winner.level === "viewer") {
60
- return current;
61
- }
62
- return winner;
63
- }, firstAdminPermission);
64
-
65
- // Remove all permissions for the current identity and add the winning one.
66
- return [resultPermission, ...folderPermissions.filter(p => p.target !== `admin:${identity.id}`)];
67
- }
68
44
  }
45
+ export { DefaultPermissionsMerger };
69
46
 
70
47
  //# sourceMappingURL=DefaultPermissionsMerger.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["DefaultPermissionsMerger","merge","identity","identityPermissions","folderPermissions","hasFullAccess","some","p","name","target","id","level","inheritedFrom","filter","length","currentAdminPermissions","noAccessPermission","find","filteredPermissions","firstAdminPermission","restAdminPermissions","resultPermission","reduce","winner","current","winnerInherits","startsWith","currentInherits"],"sources":["DefaultPermissionsMerger.ts"],"sourcesContent":["import { SecurityIdentity, SecurityPermission } from \"@webiny/api-core/types/security.js\";\nimport type { FolderAccessLevel, FolderPermission } from \"~/flp/flp.types.js\";\n\nexport class DefaultPermissionsMerger {\n static merge(\n identity: SecurityIdentity,\n identityPermissions: SecurityPermission[],\n folderPermissions: FolderPermission[]\n ): FolderPermission[] {\n // If the user has full access permission, add a specific \"owner\" permission to the list.\n // This ensures the user has complete control over the folder.\n const hasFullAccess = identityPermissions.some(p => p.name === \"*\");\n if (hasFullAccess) {\n return [\n {\n target: `admin:${identity.id}`,\n level: \"owner\" as FolderAccessLevel,\n inheritedFrom: \"role:full-access\"\n },\n\n // Remove any permissions related to the full access user,\n // as these are always superseded by the \"owner\" permission defined above.\n ...folderPermissions.filter(p => p.target !== `admin:${identity.id}`)\n ];\n }\n\n if (folderPermissions.length === 0) {\n // No permissions provided. This means the folder is public.\n // Add a specific \"public\" permission to the list to ensure the folder is accessible to everyone.\n return [\n {\n target: `admin:${identity.id}`,\n level: \"public\" as FolderAccessLevel,\n inheritedFrom: \"public\"\n }\n ];\n }\n\n // If there are multiple `admin:${identity.id}` permissions in the array,\n // we need to pick the one with the highest access level. We also remove\n // other permissions for the same identity.\n\n // Get permissions related to the current identity (admin).\n const currentAdminPermissions = folderPermissions.filter(\n p => p.target === `admin:${identity.id}`\n );\n\n if (currentAdminPermissions.length === 0) {\n return folderPermissions;\n }\n\n const noAccessPermission = currentAdminPermissions.find(\n p => p.level === \"no-access\" && p.target === `admin:${identity.id}`\n );\n\n if (noAccessPermission) {\n // If one of the permissions is `no-access`, then we can immediately return it. This is\n // because `no-access` is the ultimate level of access, and no other permission can override it.\n // Remove all permissions for the current identity and add the winning one.\n const filteredPermissions = folderPermissions.filter(\n p => p.target !== `admin:${identity.id}`\n );\n\n return [...filteredPermissions, noAccessPermission];\n }\n\n const [firstAdminPermission, ...restAdminPermissions] = currentAdminPermissions;\n\n const resultPermission = restAdminPermissions.reduce((winner, current) => {\n const winnerInherits = winner.inheritedFrom?.startsWith(\"parent:\");\n const currentInherits = current.inheritedFrom?.startsWith(\"parent:\");\n\n if (winnerInherits && !currentInherits) {\n return current;\n }\n if (currentInherits && !winnerInherits) {\n return winner;\n }\n\n // At this point, we're either comparing two permissions with `inheritedFrom` or two without it.\n // In other words, we're now at a point where we start comparing the levels (owner > editor > viewer).\n if (current.level === \"owner\") {\n return current;\n }\n\n if (current.level === \"editor\" && winner.level === \"viewer\") {\n return current;\n }\n\n return winner;\n }, firstAdminPermission);\n\n // Remove all permissions for the current identity and add the winning one.\n return [\n resultPermission,\n ...folderPermissions.filter(p => p.target !== `admin:${identity.id}`)\n ];\n }\n}\n"],"mappings":"AAGA,OAAO,MAAMA,wBAAwB,CAAC;EAClC,OAAOC,KAAKA,CACRC,QAA0B,EAC1BC,mBAAyC,EACzCC,iBAAqC,EACnB;IAClB;IACA;IACA,MAAMC,aAAa,GAAGF,mBAAmB,CAACG,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,IAAI,KAAK,GAAG,CAAC;IACnE,IAAIH,aAAa,EAAE;MACf,OAAO,CACH;QACII,MAAM,EAAE,SAASP,QAAQ,CAACQ,EAAE,EAAE;QAC9BC,KAAK,EAAE,OAA4B;QACnCC,aAAa,EAAE;MACnB,CAAC;MAED;MACA;MACA,GAAGR,iBAAiB,CAACS,MAAM,CAACN,CAAC,IAAIA,CAAC,CAACE,MAAM,KAAK,SAASP,QAAQ,CAACQ,EAAE,EAAE,CAAC,CACxE;IACL;IAEA,IAAIN,iBAAiB,CAACU,MAAM,KAAK,CAAC,EAAE;MAChC;MACA;MACA,OAAO,CACH;QACIL,MAAM,EAAE,SAASP,QAAQ,CAACQ,EAAE,EAAE;QAC9BC,KAAK,EAAE,QAA6B;QACpCC,aAAa,EAAE;MACnB,CAAC,CACJ;IACL;;IAEA;IACA;IACA;;IAEA;IACA,MAAMG,uBAAuB,GAAGX,iBAAiB,CAACS,MAAM,CACpDN,CAAC,IAAIA,CAAC,CAACE,MAAM,KAAK,SAASP,QAAQ,CAACQ,EAAE,EAC1C,CAAC;IAED,IAAIK,uBAAuB,CAACD,MAAM,KAAK,CAAC,EAAE;MACtC,OAAOV,iBAAiB;IAC5B;IAEA,MAAMY,kBAAkB,GAAGD,uBAAuB,CAACE,IAAI,CACnDV,CAAC,IAAIA,CAAC,CAACI,KAAK,KAAK,WAAW,IAAIJ,CAAC,CAACE,MAAM,KAAK,SAASP,QAAQ,CAACQ,EAAE,EACrE,CAAC;IAED,IAAIM,kBAAkB,EAAE;MACpB;MACA;MACA;MACA,MAAME,mBAAmB,GAAGd,iBAAiB,CAACS,MAAM,CAChDN,CAAC,IAAIA,CAAC,CAACE,MAAM,KAAK,SAASP,QAAQ,CAACQ,EAAE,EAC1C,CAAC;MAED,OAAO,CAAC,GAAGQ,mBAAmB,EAAEF,kBAAkB,CAAC;IACvD;IAEA,MAAM,CAACG,oBAAoB,EAAE,GAAGC,oBAAoB,CAAC,GAAGL,uBAAuB;IAE/E,MAAMM,gBAAgB,GAAGD,oBAAoB,CAACE,MAAM,CAAC,CAACC,MAAM,EAAEC,OAAO,KAAK;MACtE,MAAMC,cAAc,GAAGF,MAAM,CAACX,aAAa,EAAEc,UAAU,CAAC,SAAS,CAAC;MAClE,MAAMC,eAAe,GAAGH,OAAO,CAACZ,aAAa,EAAEc,UAAU,CAAC,SAAS,CAAC;MAEpE,IAAID,cAAc,IAAI,CAACE,eAAe,EAAE;QACpC,OAAOH,OAAO;MAClB;MACA,IAAIG,eAAe,IAAI,CAACF,cAAc,EAAE;QACpC,OAAOF,MAAM;MACjB;;MAEA;MACA;MACA,IAAIC,OAAO,CAACb,KAAK,KAAK,OAAO,EAAE;QAC3B,OAAOa,OAAO;MAClB;MAEA,IAAIA,OAAO,CAACb,KAAK,KAAK,QAAQ,IAAIY,MAAM,CAACZ,KAAK,KAAK,QAAQ,EAAE;QACzD,OAAOa,OAAO;MAClB;MAEA,OAAOD,MAAM;IACjB,CAAC,EAAEJ,oBAAoB,CAAC;;IAExB;IACA,OAAO,CACHE,gBAAgB,EAChB,GAAGjB,iBAAiB,CAACS,MAAM,CAACN,CAAC,IAAIA,CAAC,CAACE,MAAM,KAAK,SAASP,QAAQ,CAACQ,EAAE,EAAE,CAAC,CACxE;EACL;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/DefaultPermissionsMerger.js","sources":["../../../../../../src/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/DefaultPermissionsMerger.ts"],"sourcesContent":["import { SecurityIdentity, SecurityPermission } from \"@webiny/api-core/types/security.js\";\nimport type { FolderAccessLevel, FolderPermission } from \"~/flp/flp.types.js\";\n\nexport class DefaultPermissionsMerger {\n static merge(\n identity: SecurityIdentity,\n identityPermissions: SecurityPermission[],\n folderPermissions: FolderPermission[]\n ): FolderPermission[] {\n // If the user has full access permission, add a specific \"owner\" permission to the list.\n // This ensures the user has complete control over the folder.\n const hasFullAccess = identityPermissions.some(p => p.name === \"*\");\n if (hasFullAccess) {\n return [\n {\n target: `admin:${identity.id}`,\n level: \"owner\" as FolderAccessLevel,\n inheritedFrom: \"role:full-access\"\n },\n\n // Remove any permissions related to the full access user,\n // as these are always superseded by the \"owner\" permission defined above.\n ...folderPermissions.filter(p => p.target !== `admin:${identity.id}`)\n ];\n }\n\n if (folderPermissions.length === 0) {\n // No permissions provided. This means the folder is public.\n // Add a specific \"public\" permission to the list to ensure the folder is accessible to everyone.\n return [\n {\n target: `admin:${identity.id}`,\n level: \"public\" as FolderAccessLevel,\n inheritedFrom: \"public\"\n }\n ];\n }\n\n // If there are multiple `admin:${identity.id}` permissions in the array,\n // we need to pick the one with the highest access level. We also remove\n // other permissions for the same identity.\n\n // Get permissions related to the current identity (admin).\n const currentAdminPermissions = folderPermissions.filter(\n p => p.target === `admin:${identity.id}`\n );\n\n if (currentAdminPermissions.length === 0) {\n return folderPermissions;\n }\n\n const noAccessPermission = currentAdminPermissions.find(\n p => p.level === \"no-access\" && p.target === `admin:${identity.id}`\n );\n\n if (noAccessPermission) {\n // If one of the permissions is `no-access`, then we can immediately return it. This is\n // because `no-access` is the ultimate level of access, and no other permission can override it.\n // Remove all permissions for the current identity and add the winning one.\n const filteredPermissions = folderPermissions.filter(\n p => p.target !== `admin:${identity.id}`\n );\n\n return [...filteredPermissions, noAccessPermission];\n }\n\n const [firstAdminPermission, ...restAdminPermissions] = currentAdminPermissions;\n\n const resultPermission = restAdminPermissions.reduce((winner, current) => {\n const winnerInherits = winner.inheritedFrom?.startsWith(\"parent:\");\n const currentInherits = current.inheritedFrom?.startsWith(\"parent:\");\n\n if (winnerInherits && !currentInherits) {\n return current;\n }\n if (currentInherits && !winnerInherits) {\n return winner;\n }\n\n // At this point, we're either comparing two permissions with `inheritedFrom` or two without it.\n // In other words, we're now at a point where we start comparing the levels (owner > editor > viewer).\n if (current.level === \"owner\") {\n return current;\n }\n\n if (current.level === \"editor\" && winner.level === \"viewer\") {\n return current;\n }\n\n return winner;\n }, firstAdminPermission);\n\n // Remove all permissions for the current identity and add the winning one.\n return [\n resultPermission,\n ...folderPermissions.filter(p => p.target !== `admin:${identity.id}`)\n ];\n }\n}\n"],"names":["DefaultPermissionsMerger","identity","identityPermissions","folderPermissions","hasFullAccess","p","currentAdminPermissions","noAccessPermission","filteredPermissions","firstAdminPermission","restAdminPermissions","resultPermission","winner","current","winnerInherits","currentInherits"],"mappings":"AAGO,MAAMA;IACT,OAAO,MACHC,QAA0B,EAC1BC,mBAAyC,EACzCC,iBAAqC,EACnB;QAGlB,MAAMC,gBAAgBF,oBAAoB,IAAI,CAACG,CAAAA,IAAKA,AAAW,QAAXA,EAAE,IAAI;QAC1D,IAAID,eACA,OAAO;YACH;gBACI,QAAQ,CAAC,MAAM,EAAEH,SAAS,EAAE,EAAE;gBAC9B,OAAO;gBACP,eAAe;YACnB;eAIGE,kBAAkB,MAAM,CAACE,CAAAA,IAAKA,EAAE,MAAM,KAAK,CAAC,MAAM,EAAEJ,SAAS,EAAE,EAAE;SACvE;QAGL,IAAIE,AAA6B,MAA7BA,kBAAkB,MAAM,EAGxB,OAAO;YACH;gBACI,QAAQ,CAAC,MAAM,EAAEF,SAAS,EAAE,EAAE;gBAC9B,OAAO;gBACP,eAAe;YACnB;SACH;QAQL,MAAMK,0BAA0BH,kBAAkB,MAAM,CACpDE,CAAAA,IAAKA,EAAE,MAAM,KAAK,CAAC,MAAM,EAAEJ,SAAS,EAAE,EAAE;QAG5C,IAAIK,AAAmC,MAAnCA,wBAAwB,MAAM,EAC9B,OAAOH;QAGX,MAAMI,qBAAqBD,wBAAwB,IAAI,CACnDD,CAAAA,IAAKA,AAAY,gBAAZA,EAAE,KAAK,IAAoBA,EAAE,MAAM,KAAK,CAAC,MAAM,EAAEJ,SAAS,EAAE,EAAE;QAGvE,IAAIM,oBAAoB;YAIpB,MAAMC,sBAAsBL,kBAAkB,MAAM,CAChDE,CAAAA,IAAKA,EAAE,MAAM,KAAK,CAAC,MAAM,EAAEJ,SAAS,EAAE,EAAE;YAG5C,OAAO;mBAAIO;gBAAqBD;aAAmB;QACvD;QAEA,MAAM,CAACE,sBAAsB,GAAGC,qBAAqB,GAAGJ;QAExD,MAAMK,mBAAmBD,qBAAqB,MAAM,CAAC,CAACE,QAAQC;YAC1D,MAAMC,iBAAiBF,OAAO,aAAa,EAAE,WAAW;YACxD,MAAMG,kBAAkBF,QAAQ,aAAa,EAAE,WAAW;YAE1D,IAAIC,kBAAkB,CAACC,iBACnB,OAAOF;YAEX,IAAIE,mBAAmB,CAACD,gBACpB,OAAOF;YAKX,IAAIC,AAAkB,YAAlBA,QAAQ,KAAK,EACb,OAAOA;YAGX,IAAIA,AAAkB,aAAlBA,QAAQ,KAAK,IAAiBD,AAAiB,aAAjBA,OAAO,KAAK,EAC1C,OAAOC;YAGX,OAAOD;QACX,GAAGH;QAGH,OAAO;YACHE;eACGR,kBAAkB,MAAM,CAACE,CAAAA,IAAKA,EAAE,MAAM,KAAK,CAAC,MAAM,EAAEJ,SAAS,EAAE,EAAE;SACvE;IACL;AACJ"}
@@ -1,13 +1,14 @@
1
1
  import { DefaultPermissionsMerger } from "./DefaultPermissionsMerger.js";
2
- export class GetDefaultPermissions {
3
- constructor(identityContext) {
4
- this.identityContext = identityContext;
5
- }
6
- async execute(permissions) {
7
- const identity = this.identityContext.getIdentity();
8
- const identityPermissions = await this.identityContext.listPermissions();
9
- return DefaultPermissionsMerger.merge(identity, identityPermissions, permissions);
10
- }
2
+ class GetDefaultPermissions {
3
+ constructor(identityContext){
4
+ this.identityContext = identityContext;
5
+ }
6
+ async execute(permissions) {
7
+ const identity = this.identityContext.getIdentity();
8
+ const identityPermissions = await this.identityContext.listPermissions();
9
+ return DefaultPermissionsMerger.merge(identity, identityPermissions, permissions);
10
+ }
11
11
  }
12
+ export { GetDefaultPermissions };
12
13
 
13
14
  //# sourceMappingURL=GetDefaultPermissions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["DefaultPermissionsMerger","GetDefaultPermissions","constructor","identityContext","execute","permissions","identity","getIdentity","identityPermissions","listPermissions","merge"],"sources":["GetDefaultPermissions.ts"],"sourcesContent":["import type { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport type { IGetDefaultPermissions } from \"./IGetDefaultPermissions.js\";\nimport type { FolderPermission } from \"~/flp/flp.types.js\";\nimport { DefaultPermissionsMerger } from \"./DefaultPermissionsMerger.js\";\n\nexport class GetDefaultPermissions implements IGetDefaultPermissions {\n constructor(private identityContext: IdentityContext.Interface) {}\n\n async execute(permissions: FolderPermission[]) {\n const identity = this.identityContext.getIdentity();\n const identityPermissions = await this.identityContext.listPermissions();\n\n return DefaultPermissionsMerger.merge(identity, identityPermissions, permissions);\n }\n}\n"],"mappings":"AAGA,SAASA,wBAAwB;AAEjC,OAAO,MAAMC,qBAAqB,CAAmC;EACjEC,WAAWA,CAASC,eAA0C,EAAE;IAAA,KAA5CA,eAA0C,GAA1CA,eAA0C;EAAG;EAEjE,MAAMC,OAAOA,CAACC,WAA+B,EAAE;IAC3C,MAAMC,QAAQ,GAAG,IAAI,CAACH,eAAe,CAACI,WAAW,CAAC,CAAC;IACnD,MAAMC,mBAAmB,GAAG,MAAM,IAAI,CAACL,eAAe,CAACM,eAAe,CAAC,CAAC;IAExE,OAAOT,wBAAwB,CAACU,KAAK,CAACJ,QAAQ,EAAEE,mBAAmB,EAAEH,WAAW,CAAC;EACrF;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissions.js","sources":["../../../../../../src/features/flp/FolderLevelPermissions/useCases/GetDefaultPermissions/GetDefaultPermissions.ts"],"sourcesContent":["import type { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport type { IGetDefaultPermissions } from \"./IGetDefaultPermissions.js\";\nimport type { FolderPermission } from \"~/flp/flp.types.js\";\nimport { DefaultPermissionsMerger } from \"./DefaultPermissionsMerger.js\";\n\nexport class GetDefaultPermissions implements IGetDefaultPermissions {\n constructor(private identityContext: IdentityContext.Interface) {}\n\n async execute(permissions: FolderPermission[]) {\n const identity = this.identityContext.getIdentity();\n const identityPermissions = await this.identityContext.listPermissions();\n\n return DefaultPermissionsMerger.merge(identity, identityPermissions, permissions);\n }\n}\n"],"names":["GetDefaultPermissions","identityContext","permissions","identity","identityPermissions","DefaultPermissionsMerger"],"mappings":";AAKO,MAAMA;IACT,YAAoBC,eAA0C,CAAE;aAA5CA,eAAe,GAAfA;IAA6C;IAEjE,MAAM,QAAQC,WAA+B,EAAE;QAC3C,MAAMC,WAAW,IAAI,CAAC,eAAe,CAAC,WAAW;QACjD,MAAMC,sBAAsB,MAAM,IAAI,CAAC,eAAe,CAAC,eAAe;QAEtE,OAAOC,yBAAyB,KAAK,CAACF,UAAUC,qBAAqBF;IACzE;AACJ"}
@@ -1,38 +1,27 @@
1
- export class GetDefaultPermissionsWithTeams {
2
- constructor(identityContext, listUserTeamsUseCase, decoretee) {
3
- this.identityContext = identityContext;
4
- this.listUserTeamsUseCase = listUserTeamsUseCase;
5
- this.decoretee = decoretee;
6
- }
7
- async execute(originalPermissions) {
8
- /**
9
- * Retrieves the list of teams the current identity belongs to and checks if any of these teams
10
- * have permissions for the folder. If a team has permissions, the current identity is granted
11
- * the same permissions, inheriting them from the team.
12
- */
13
- const identity = this.identityContext.getIdentity();
14
-
15
- // Get teams for current identity
16
- const listTeamsResult = await this.listUserTeamsUseCase.execute(identity.id);
17
- const identityTeams = listTeamsResult.isOk() ? listTeamsResult.value : [];
18
- const permissions = [...originalPermissions]; // Clone the original permissions to avoid mutation.
19
-
20
- if (identity && identityTeams.length) {
21
- for (const identityTeam of identityTeams) {
22
- // Check if the team has permissions for the folder.
23
- const teamPermission = permissions.find(p => p.target === `team:${identityTeam.slug}`);
24
- if (teamPermission) {
25
- // Grant the current identity the same permissions as the team, marking them as inherited.
26
- permissions.push({
27
- target: `admin:${identity.id}`,
28
- level: teamPermission.level,
29
- inheritedFrom: "team:" + identityTeam.slug
30
- });
1
+ class GetDefaultPermissionsWithTeams {
2
+ constructor(identityContext, listUserTeamsUseCase, decoretee){
3
+ this.identityContext = identityContext;
4
+ this.listUserTeamsUseCase = listUserTeamsUseCase;
5
+ this.decoretee = decoretee;
6
+ }
7
+ async execute(originalPermissions) {
8
+ const identity = this.identityContext.getIdentity();
9
+ const listTeamsResult = await this.listUserTeamsUseCase.execute(identity.id);
10
+ const identityTeams = listTeamsResult.isOk() ? listTeamsResult.value : [];
11
+ const permissions = [
12
+ ...originalPermissions
13
+ ];
14
+ if (identity && identityTeams.length) for (const identityTeam of identityTeams){
15
+ const teamPermission = permissions.find((p)=>p.target === `team:${identityTeam.slug}`);
16
+ if (teamPermission) permissions.push({
17
+ target: `admin:${identity.id}`,
18
+ level: teamPermission.level,
19
+ inheritedFrom: "team:" + identityTeam.slug
20
+ });
31
21
  }
32
- }
22
+ return await this.decoretee.execute(permissions);
33
23
  }
34
- return await this.decoretee.execute(permissions);
35
- }
36
24
  }
25
+ export { GetDefaultPermissionsWithTeams };
37
26
 
38
27
  //# sourceMappingURL=GetDefaultPermissionsWithTeams.js.map