@strapi/admin 4.14.1 → 4.14.3

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 (378) hide show
  1. package/admin/src/content-manager/hooks/useRelation/useRelation.js +1 -0
  2. package/build/{Admin-authenticatedApp.c0c1c027.chunk.js → Admin-authenticatedApp.a16cdc37.chunk.js} +1 -1
  3. package/build/{content-manager.0d2b4a60.chunk.js → content-manager.e1e49cc9.chunk.js} +1 -1
  4. package/build/index.html +1 -1
  5. package/build/{runtime~main.6c489074.js → runtime~main.377a22d0.js} +1 -1
  6. package/dist/server/admin/server/src/bootstrap.d.ts +2 -0
  7. package/dist/server/admin/server/src/controllers/admin.d.ts +42 -0
  8. package/dist/server/admin/server/src/controllers/api-token.d.ts +10 -0
  9. package/dist/server/admin/server/src/controllers/authenticated-user.d.ts +6 -0
  10. package/dist/server/admin/server/src/controllers/authentication.d.ts +12 -0
  11. package/dist/server/admin/server/src/controllers/permission.d.ts +13 -0
  12. package/dist/server/admin/server/src/controllers/role.d.ts +43 -0
  13. package/dist/server/admin/server/src/controllers/transfer/token.d.ts +9 -0
  14. package/dist/server/admin/server/src/controllers/user.d.ts +13 -0
  15. package/dist/server/admin/server/src/destroy.d.ts +2 -0
  16. package/dist/server/admin/server/src/domain/condition/index.d.ts +56 -0
  17. package/dist/server/admin/server/src/domain/condition/index.js +53 -0
  18. package/dist/server/admin/server/src/domain/condition/index.js.map +1 -0
  19. package/dist/server/admin/server/src/domain/condition/provider.d.ts +30 -0
  20. package/dist/server/admin/server/src/domain/condition/provider.js +37 -0
  21. package/dist/server/admin/server/src/domain/condition/provider.js.map +1 -0
  22. package/dist/server/admin/server/src/index.d.ts +10 -0
  23. package/dist/server/admin/server/src/middlewares/data-transfer.d.ts +2 -0
  24. package/dist/server/admin/server/src/services/action.d.ts +9 -0
  25. package/dist/server/admin/server/src/services/auth.d.ts +42 -0
  26. package/dist/server/admin/server/src/services/condition.d.ts +2 -0
  27. package/dist/server/admin/server/src/services/content-type.d.ts +51 -0
  28. package/dist/server/admin/server/src/services/index.d.ts +61 -0
  29. package/dist/server/admin/server/src/services/metrics.d.ts +7 -0
  30. package/dist/server/admin/server/src/services/permission/engine.d.ts +15 -0
  31. package/dist/server/admin/server/src/services/permission/queries.d.ts +44 -0
  32. package/dist/server/admin/server/src/services/permission.d.ts +67 -0
  33. package/dist/server/admin/server/src/services/role.d.ts +116 -0
  34. package/dist/server/admin/server/src/services/transfer/token.d.ts +103 -0
  35. package/dist/server/admin/server/src/services/transfer/utils.d.ts +19 -0
  36. package/dist/server/admin/server/src/services/user.d.ts +96 -0
  37. package/dist/server/admin/server/src/strategies/admin.d.ts +25 -0
  38. package/dist/server/admin/server/src/strategies/api-token.d.ts +60 -0
  39. package/dist/server/admin/server/src/strategies/data-transfer.d.ts +50 -0
  40. package/dist/server/admin/server/src/validation/common-validators.d.ts +59 -0
  41. package/dist/server/admin/server/src/validation/permission.d.ts +9 -0
  42. package/dist/server/bootstrap.d.ts +2 -0
  43. package/dist/server/bootstrap.js +84 -0
  44. package/dist/server/bootstrap.js.map +1 -0
  45. package/dist/server/config/admin-actions.d.ts +33 -0
  46. package/dist/server/config/admin-actions.js +219 -0
  47. package/dist/server/config/admin-actions.js.map +1 -0
  48. package/dist/server/config/admin-conditions.d.ts +46 -0
  49. package/dist/server/config/admin-conditions.js +29 -0
  50. package/dist/server/config/admin-conditions.js.map +1 -0
  51. package/dist/server/config/email-templates/forgot-password.d.ts +6 -0
  52. package/dist/server/config/email-templates/forgot-password.js +19 -0
  53. package/dist/server/config/email-templates/forgot-password.js.map +1 -0
  54. package/dist/server/config/index.d.ts +17 -0
  55. package/dist/server/config/index.js +14 -0
  56. package/dist/server/config/index.js.map +1 -0
  57. package/dist/server/config/settings.d.ts +7 -0
  58. package/dist/server/config/settings.js +11 -0
  59. package/dist/server/config/settings.js.map +1 -0
  60. package/dist/server/content-types/Permission.d.ts +62 -0
  61. package/dist/server/content-types/Permission.js +64 -0
  62. package/dist/server/content-types/Permission.js.map +1 -0
  63. package/dist/server/content-types/Role.d.ts +57 -0
  64. package/dist/server/content-types/Role.js +59 -0
  65. package/dist/server/content-types/Role.js.map +1 -0
  66. package/dist/server/content-types/User.d.ts +106 -0
  67. package/dist/server/content-types/User.js +109 -0
  68. package/dist/server/content-types/User.js.map +1 -0
  69. package/dist/server/content-types/api-token-permission.d.ts +35 -0
  70. package/dist/server/content-types/api-token-permission.js +37 -0
  71. package/dist/server/content-types/api-token-permission.js.map +1 -0
  72. package/dist/server/content-types/api-token.d.ts +73 -0
  73. package/dist/server/content-types/api-token.js +79 -0
  74. package/dist/server/content-types/api-token.js.map +1 -0
  75. package/dist/server/content-types/index.d.ts +437 -0
  76. package/dist/server/content-types/index.js +22 -0
  77. package/dist/server/content-types/index.js.map +1 -0
  78. package/dist/server/content-types/transfer-token-permission.d.ts +35 -0
  79. package/dist/server/content-types/transfer-token-permission.js +37 -0
  80. package/dist/server/content-types/transfer-token-permission.js.map +1 -0
  81. package/dist/server/content-types/transfer-token.d.ts +65 -0
  82. package/dist/server/content-types/transfer-token.js +67 -0
  83. package/dist/server/content-types/transfer-token.js.map +1 -0
  84. package/dist/server/controllers/admin.d.ts +42 -0
  85. package/dist/server/controllers/admin.js +131 -0
  86. package/dist/server/controllers/admin.js.map +1 -0
  87. package/dist/server/controllers/api-token.d.ts +10 -0
  88. package/dist/server/controllers/api-token.js +106 -0
  89. package/dist/server/controllers/api-token.js.map +1 -0
  90. package/dist/server/controllers/authenticated-user.d.ts +6 -0
  91. package/dist/server/controllers/authenticated-user.js +41 -0
  92. package/dist/server/controllers/authenticated-user.js.map +1 -0
  93. package/dist/server/controllers/authentication.d.ts +12 -0
  94. package/dist/server/controllers/authentication.js +130 -0
  95. package/dist/server/controllers/authentication.js.map +1 -0
  96. package/dist/server/controllers/content-api.d.ts +5 -0
  97. package/dist/server/controllers/content-api.js +13 -0
  98. package/dist/server/controllers/content-api.js.map +1 -0
  99. package/dist/server/controllers/formatters/conditions.d.ts +3 -0
  100. package/dist/server/controllers/formatters/conditions.js +9 -0
  101. package/dist/server/controllers/formatters/conditions.js.map +1 -0
  102. package/dist/server/controllers/formatters/format-actions-by-sections.d.ts +7 -0
  103. package/dist/server/controllers/formatters/format-actions-by-sections.js +36 -0
  104. package/dist/server/controllers/formatters/format-actions-by-sections.js.map +1 -0
  105. package/dist/server/controllers/formatters/index.d.ts +2 -0
  106. package/dist/server/controllers/formatters/index.js +11 -0
  107. package/dist/server/controllers/formatters/index.js.map +1 -0
  108. package/dist/server/controllers/index.d.ts +68 -0
  109. package/dist/server/controllers/index.js +51 -0
  110. package/dist/server/controllers/index.js.map +1 -0
  111. package/dist/server/controllers/permission.d.ts +13 -0
  112. package/dist/server/controllers/permission.js +38 -0
  113. package/dist/server/controllers/permission.js.map +1 -0
  114. package/dist/server/controllers/role.d.ts +43 -0
  115. package/dist/server/controllers/role.js +148 -0
  116. package/dist/server/controllers/role.js.map +1 -0
  117. package/dist/server/controllers/transfer/index.d.ts +4 -0
  118. package/dist/server/controllers/transfer/index.js +14 -0
  119. package/dist/server/controllers/transfer/index.js.map +1 -0
  120. package/dist/server/controllers/transfer/runner.d.ts +6 -0
  121. package/dist/server/controllers/transfer/runner.js +25 -0
  122. package/dist/server/controllers/transfer/runner.js.map +1 -0
  123. package/dist/server/controllers/transfer/token.d.ts +9 -0
  124. package/dist/server/controllers/transfer/token.js +100 -0
  125. package/dist/server/controllers/transfer/token.js.map +1 -0
  126. package/dist/server/controllers/user.d.ts +13 -0
  127. package/dist/server/controllers/user.js +105 -0
  128. package/dist/server/controllers/user.js.map +1 -0
  129. package/dist/server/controllers/webhooks.d.ts +10 -0
  130. package/dist/server/controllers/webhooks.js +100 -0
  131. package/dist/server/controllers/webhooks.js.map +1 -0
  132. package/dist/server/destroy.d.ts +2 -0
  133. package/dist/server/destroy.js +9 -0
  134. package/dist/server/destroy.js.map +1 -0
  135. package/dist/server/domain/action/index.d.ts +33 -0
  136. package/dist/server/domain/action/index.js +98 -0
  137. package/dist/server/domain/action/index.js.map +1 -0
  138. package/dist/server/domain/action/provider.d.ts +38 -0
  139. package/dist/server/domain/action/provider.js +66 -0
  140. package/dist/server/domain/action/provider.js.map +1 -0
  141. package/dist/server/domain/condition/index.d.ts +53 -0
  142. package/dist/server/domain/condition/index.js +56 -0
  143. package/dist/server/domain/condition/index.js.map +1 -0
  144. package/dist/server/domain/condition/provider.d.ts +30 -0
  145. package/dist/server/domain/condition/provider.js +37 -0
  146. package/dist/server/domain/condition/provider.js.map +1 -0
  147. package/dist/server/domain/permission/index.d.ts +77 -0
  148. package/dist/server/domain/permission/index.js +119 -0
  149. package/dist/server/domain/permission/index.js.map +1 -0
  150. package/dist/server/domain/user.d.ts +32 -0
  151. package/dist/server/domain/user.js +28 -0
  152. package/dist/server/domain/user.js.map +1 -0
  153. package/dist/server/index.d.ts +10 -0
  154. package/dist/server/index.js +27 -0
  155. package/dist/server/index.js.map +1 -0
  156. package/dist/server/middlewares/data-transfer.d.ts +2 -0
  157. package/dist/server/middlewares/data-transfer.js +21 -0
  158. package/dist/server/middlewares/data-transfer.js.map +1 -0
  159. package/dist/server/middlewares/index.d.ts +9 -0
  160. package/dist/server/middlewares/index.js +17 -0
  161. package/dist/server/middlewares/index.js.map +1 -0
  162. package/dist/server/middlewares/rateLimit.d.ts +5 -0
  163. package/dist/server/middlewares/rateLimit.js +42 -0
  164. package/dist/server/middlewares/rateLimit.js.map +1 -0
  165. package/dist/server/policies/hasPermissions.d.ts +6 -0
  166. package/dist/server/policies/hasPermissions.js +38 -0
  167. package/dist/server/policies/hasPermissions.js.map +1 -0
  168. package/dist/server/policies/index.d.ts +14 -0
  169. package/dist/server/policies/index.js +10 -0
  170. package/dist/server/policies/index.js.map +1 -0
  171. package/dist/server/policies/isAuthenticatedAdmin.d.ts +2 -0
  172. package/dist/server/policies/isAuthenticatedAdmin.js +6 -0
  173. package/dist/server/policies/isAuthenticatedAdmin.js.map +1 -0
  174. package/dist/server/policies/isTelemetryEnabled.d.ts +10 -0
  175. package/dist/server/policies/isTelemetryEnabled.js +18 -0
  176. package/dist/server/policies/isTelemetryEnabled.js.map +1 -0
  177. package/dist/server/register.d.ts +2 -0
  178. package/dist/server/register.js +18 -0
  179. package/dist/server/register.js.map +1 -0
  180. package/dist/server/routes/admin.d.ts +23 -0
  181. package/dist/server/routes/admin.js +72 -0
  182. package/dist/server/routes/admin.js.map +1 -0
  183. package/dist/server/routes/api-tokens.d.ts +14 -0
  184. package/dist/server/routes/api-tokens.js +71 -0
  185. package/dist/server/routes/api-tokens.js.map +1 -0
  186. package/dist/server/routes/authentication.d.ts +29 -0
  187. package/dist/server/routes/authentication.js +58 -0
  188. package/dist/server/routes/authentication.js.map +1 -0
  189. package/dist/server/routes/content-api.d.ts +9 -0
  190. package/dist/server/routes/content-api.js +21 -0
  191. package/dist/server/routes/content-api.js.map +1 -0
  192. package/dist/server/routes/index.d.ts +66 -0
  193. package/dist/server/routes/index.js +32 -0
  194. package/dist/server/routes/index.js.map +1 -0
  195. package/dist/server/routes/permissions.d.ts +9 -0
  196. package/dist/server/routes/permissions.js +21 -0
  197. package/dist/server/routes/permissions.js.map +1 -0
  198. package/dist/server/routes/roles.d.ts +14 -0
  199. package/dist/server/routes/roles.js +108 -0
  200. package/dist/server/routes/roles.js.map +1 -0
  201. package/dist/server/routes/serve-admin-panel.d.ts +5 -0
  202. package/dist/server/routes/serve-admin-panel.js +65 -0
  203. package/dist/server/routes/serve-admin-panel.js.map +1 -0
  204. package/dist/server/routes/transfer.d.ts +55 -0
  205. package/dist/server/routes/transfer.js +105 -0
  206. package/dist/server/routes/transfer.js.map +1 -0
  207. package/dist/server/routes/users.d.ts +14 -0
  208. package/dist/server/routes/users.js +89 -0
  209. package/dist/server/routes/users.js.map +1 -0
  210. package/dist/server/routes/webhooks.d.ts +14 -0
  211. package/dist/server/routes/webhooks.js +82 -0
  212. package/dist/server/routes/webhooks.js.map +1 -0
  213. package/dist/server/services/action.d.ts +9 -0
  214. package/dist/server/services/action.js +29 -0
  215. package/dist/server/services/action.js.map +1 -0
  216. package/dist/server/services/api-token.d.ts +102 -0
  217. package/dist/server/services/api-token.js +378 -0
  218. package/dist/server/services/api-token.js.map +1 -0
  219. package/dist/server/services/auth.d.ts +42 -0
  220. package/dist/server/services/auth.js +98 -0
  221. package/dist/server/services/auth.js.map +1 -0
  222. package/dist/server/services/condition.d.ts +2 -0
  223. package/dist/server/services/condition.js +11 -0
  224. package/dist/server/services/condition.js.map +1 -0
  225. package/dist/server/services/constants.d.ts +33 -0
  226. package/dist/server/services/constants.js +37 -0
  227. package/dist/server/services/constants.js.map +1 -0
  228. package/dist/server/services/content-type.d.ts +51 -0
  229. package/dist/server/services/content-type.js +158 -0
  230. package/dist/server/services/content-type.js.map +1 -0
  231. package/dist/server/services/index.d.ts +61 -0
  232. package/dist/server/services/index.js +57 -0
  233. package/dist/server/services/index.js.map +1 -0
  234. package/dist/server/services/metrics.d.ts +7 -0
  235. package/dist/server/services/metrics.js +37 -0
  236. package/dist/server/services/metrics.js.map +1 -0
  237. package/dist/server/services/passport/local-strategy.d.ts +3 -0
  238. package/dist/server/services/passport/local-strategy.js +28 -0
  239. package/dist/server/services/passport/local-strategy.js.map +1 -0
  240. package/dist/server/services/passport.d.ts +7 -0
  241. package/dist/server/services/passport.js +40 -0
  242. package/dist/server/services/passport.js.map +1 -0
  243. package/dist/server/services/permission/engine.d.ts +15 -0
  244. package/dist/server/services/permission/engine.js +67 -0
  245. package/dist/server/services/permission/engine.js.map +1 -0
  246. package/dist/server/services/permission/permissions-manager/index.d.ts +16 -0
  247. package/dist/server/services/permission/permissions-manager/index.js +48 -0
  248. package/dist/server/services/permission/permissions-manager/index.js.map +1 -0
  249. package/dist/server/services/permission/permissions-manager/query-builders.d.ts +3 -0
  250. package/dist/server/services/permission/permissions-manager/query-builders.js +66 -0
  251. package/dist/server/services/permission/permissions-manager/query-builders.js.map +1 -0
  252. package/dist/server/services/permission/permissions-manager/sanitize.d.ts +6 -0
  253. package/dist/server/services/permission/permissions-manager/sanitize.js +184 -0
  254. package/dist/server/services/permission/permissions-manager/sanitize.js.map +1 -0
  255. package/dist/server/services/permission/permissions-manager/validate.d.ts +5 -0
  256. package/dist/server/services/permission/permissions-manager/validate.js +134 -0
  257. package/dist/server/services/permission/permissions-manager/validate.js.map +1 -0
  258. package/dist/server/services/permission/queries.d.ts +44 -0
  259. package/dist/server/services/permission/queries.js +159 -0
  260. package/dist/server/services/permission/queries.js.map +1 -0
  261. package/dist/server/services/permission/sections-builder/builder.d.ts +39 -0
  262. package/dist/server/services/permission/sections-builder/builder.js +75 -0
  263. package/dist/server/services/permission/sections-builder/builder.js.map +1 -0
  264. package/dist/server/services/permission/sections-builder/handlers.d.ts +44 -0
  265. package/dist/server/services/permission/sections-builder/handlers.js +124 -0
  266. package/dist/server/services/permission/sections-builder/handlers.js.map +1 -0
  267. package/dist/server/services/permission/sections-builder/index.d.ts +8 -0
  268. package/dist/server/services/permission/sections-builder/index.js +39 -0
  269. package/dist/server/services/permission/sections-builder/index.js.map +1 -0
  270. package/dist/server/services/permission/sections-builder/section.d.ts +38 -0
  271. package/dist/server/services/permission/sections-builder/section.js +56 -0
  272. package/dist/server/services/permission/sections-builder/section.js.map +1 -0
  273. package/dist/server/services/permission/sections-builder/utils.d.ts +12 -0
  274. package/dist/server/services/permission/sections-builder/utils.js +23 -0
  275. package/dist/server/services/permission/sections-builder/utils.js.map +1 -0
  276. package/dist/server/services/permission.d.ts +67 -0
  277. package/dist/server/services/permission.js +33 -0
  278. package/dist/server/services/permission.js.map +1 -0
  279. package/dist/server/services/project-settings.d.ts +5 -0
  280. package/dist/server/services/project-settings.js +139 -0
  281. package/dist/server/services/project-settings.js.map +1 -0
  282. package/dist/server/services/role.d.ts +116 -0
  283. package/dist/server/services/role.js +382 -0
  284. package/dist/server/services/role.js.map +1 -0
  285. package/dist/server/services/token.d.ts +35 -0
  286. package/dist/server/services/token.js +58 -0
  287. package/dist/server/services/token.js.map +1 -0
  288. package/dist/server/services/transfer/index.d.ts +4 -0
  289. package/dist/server/services/transfer/index.js +33 -0
  290. package/dist/server/services/transfer/index.js.map +1 -0
  291. package/dist/server/services/transfer/permission.d.ts +6 -0
  292. package/dist/server/services/transfer/permission.js +20 -0
  293. package/dist/server/services/transfer/permission.js.map +1 -0
  294. package/dist/server/services/transfer/token.d.ts +84 -0
  295. package/dist/server/services/transfer/token.js +273 -0
  296. package/dist/server/services/transfer/token.js.map +1 -0
  297. package/dist/server/services/transfer/utils.d.ts +13 -0
  298. package/dist/server/services/transfer/utils.js +29 -0
  299. package/dist/server/services/transfer/utils.js.map +1 -0
  300. package/dist/server/services/user.d.ts +96 -0
  301. package/dist/server/services/user.js +311 -0
  302. package/dist/server/services/user.js.map +1 -0
  303. package/dist/server/strategies/admin.d.ts +25 -0
  304. package/dist/server/strategies/admin.js +44 -0
  305. package/dist/server/strategies/admin.js.map +1 -0
  306. package/dist/server/strategies/api-token.d.ts +60 -0
  307. package/dist/server/strategies/api-token.js +121 -0
  308. package/dist/server/strategies/api-token.js.map +1 -0
  309. package/dist/server/strategies/data-transfer.d.ts +66 -0
  310. package/dist/server/strategies/data-transfer.js +94 -0
  311. package/dist/server/strategies/data-transfer.js.map +1 -0
  312. package/dist/server/strategies/index.d.ts +17 -0
  313. package/dist/server/strategies/index.js +27 -0
  314. package/dist/server/strategies/index.js.map +1 -0
  315. package/dist/server/types/src/types/utils/object.d.ts +58 -0
  316. package/dist/server/types/src/types/utils/object.js +3 -0
  317. package/dist/server/types/src/types/utils/object.js.map +1 -0
  318. package/dist/server/utils/index.d.ts +1 -0
  319. package/dist/server/utils/index.js +9 -0
  320. package/dist/server/utils/index.js.map +1 -0
  321. package/dist/server/utils/types.d.ts +14 -0
  322. package/dist/server/utils/types.js +3 -0
  323. package/dist/server/utils/types.js.map +1 -0
  324. package/dist/server/validation/action-provider.d.ts +5 -0
  325. package/dist/server/validation/action-provider.js +58 -0
  326. package/dist/server/validation/action-provider.js.map +1 -0
  327. package/dist/server/validation/api-tokens.d.ts +7 -0
  328. package/dist/server/validation/api-tokens.js +36 -0
  329. package/dist/server/validation/api-tokens.js.map +1 -0
  330. package/dist/server/validation/authentication/forgot-password.d.ts +2 -0
  331. package/dist/server/validation/authentication/forgot-password.js +16 -0
  332. package/dist/server/validation/authentication/forgot-password.js.map +1 -0
  333. package/dist/server/validation/authentication/index.d.ts +5 -0
  334. package/dist/server/validation/authentication/index.js +17 -0
  335. package/dist/server/validation/authentication/index.js.map +1 -0
  336. package/dist/server/validation/authentication/register.d.ts +9 -0
  337. package/dist/server/validation/authentication/register.js +49 -0
  338. package/dist/server/validation/authentication/register.js.map +1 -0
  339. package/dist/server/validation/authentication/renew-token.d.ts +2 -0
  340. package/dist/server/validation/authentication/renew-token.js +6 -0
  341. package/dist/server/validation/authentication/renew-token.js.map +1 -0
  342. package/dist/server/validation/authentication/reset-password.d.ts +2 -0
  343. package/dist/server/validation/authentication/reset-password.js +17 -0
  344. package/dist/server/validation/authentication/reset-password.js.map +1 -0
  345. package/dist/server/validation/common-functions/check-fields-are-correctly-nested.d.ts +2 -0
  346. package/dist/server/validation/common-functions/check-fields-are-correctly-nested.js +26 -0
  347. package/dist/server/validation/common-functions/check-fields-are-correctly-nested.js.map +1 -0
  348. package/dist/server/validation/common-functions/check-fields-dont-have-duplicates.d.ts +2 -0
  349. package/dist/server/validation/common-functions/check-fields-dont-have-duplicates.js +18 -0
  350. package/dist/server/validation/common-functions/check-fields-dont-have-duplicates.js.map +1 -0
  351. package/dist/server/validation/common-functions/index.d.ts +3 -0
  352. package/dist/server/validation/common-functions/index.js +11 -0
  353. package/dist/server/validation/common-functions/index.js.map +1 -0
  354. package/dist/server/validation/common-validators.d.ts +59 -0
  355. package/dist/server/validation/common-validators.js +162 -0
  356. package/dist/server/validation/common-validators.js.map +1 -0
  357. package/dist/server/validation/permission.d.ts +9 -0
  358. package/dist/server/validation/permission.js +46 -0
  359. package/dist/server/validation/permission.js.map +1 -0
  360. package/dist/server/validation/policies/hasPermissions.d.ts +5 -0
  361. package/dist/server/validation/policies/hasPermissions.js +29 -0
  362. package/dist/server/validation/policies/hasPermissions.js.map +1 -0
  363. package/dist/server/validation/project-settings.d.ts +9 -0
  364. package/dist/server/validation/project-settings.js +44 -0
  365. package/dist/server/validation/project-settings.js.map +1 -0
  366. package/dist/server/validation/role.d.ts +11 -0
  367. package/dist/server/validation/role.js +62 -0
  368. package/dist/server/validation/role.js.map +1 -0
  369. package/dist/server/validation/transfer/index.d.ts +1 -0
  370. package/dist/server/validation/transfer/index.js +9 -0
  371. package/dist/server/validation/transfer/index.js.map +1 -0
  372. package/dist/server/validation/transfer/token.d.ts +7 -0
  373. package/dist/server/validation/transfer/token.js +46 -0
  374. package/dist/server/validation/transfer/token.js.map +1 -0
  375. package/dist/server/validation/user.d.ts +117 -0
  376. package/dist/server/validation/user.js +69 -0
  377. package/dist/server/validation/user.js.map +1 -0
  378. package/package.json +9 -9
@@ -0,0 +1,3 @@
1
+ declare const buildCaslQuery: (ability: any, action: any, model: any) => import("@casl/ability/extra").AbilityQuery<object> | null;
2
+ declare const buildStrapiQuery: (caslQuery: any) => any;
3
+ export { buildCaslQuery, buildStrapiQuery };
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.buildStrapiQuery = exports.buildCaslQuery = void 0;
7
+ // TODO: migration
8
+ const lodash_1 = __importDefault(require("lodash"));
9
+ const extra_1 = require("@casl/ability/extra");
10
+ const operatorsMap = {
11
+ $in: '$in',
12
+ $nin: '$notIn',
13
+ $exists: '$notNull',
14
+ $gte: '$gte',
15
+ $gt: '$gt',
16
+ $lte: '$lte',
17
+ $lt: '$lt',
18
+ $eq: '$eq',
19
+ $ne: '$ne',
20
+ $and: '$and',
21
+ $or: '$or',
22
+ $not: '$not',
23
+ };
24
+ const mapKey = (key) => {
25
+ if (lodash_1.default.isString(key) && key.startsWith('$') && key in operatorsMap) {
26
+ return operatorsMap[key];
27
+ }
28
+ return key;
29
+ };
30
+ const buildCaslQuery = (ability, action, model) => {
31
+ // @ts-expect-error
32
+ return (0, extra_1.rulesToQuery)(ability, action, model, (o) => o.conditions);
33
+ };
34
+ exports.buildCaslQuery = buildCaslQuery;
35
+ const buildStrapiQuery = (caslQuery) => {
36
+ return unwrapDeep(caslQuery);
37
+ };
38
+ exports.buildStrapiQuery = buildStrapiQuery;
39
+ const unwrapDeep = (obj) => {
40
+ if (!lodash_1.default.isPlainObject(obj) && !lodash_1.default.isArray(obj)) {
41
+ return obj;
42
+ }
43
+ if (lodash_1.default.isArray(obj)) {
44
+ return obj.map((v) => unwrapDeep(v));
45
+ }
46
+ return lodash_1.default.reduce(obj, (acc, v, k) => {
47
+ const key = mapKey(k);
48
+ if (lodash_1.default.isPlainObject(v)) {
49
+ if ('$elemMatch' in v) {
50
+ lodash_1.default.setWith(acc, key, unwrapDeep(v.$elemMatch));
51
+ }
52
+ else {
53
+ lodash_1.default.setWith(acc, key, unwrapDeep(v));
54
+ }
55
+ }
56
+ else if (lodash_1.default.isArray(v)) {
57
+ // prettier-ignore
58
+ lodash_1.default.setWith(acc, key, v.map(v => unwrapDeep(v)));
59
+ }
60
+ else {
61
+ lodash_1.default.setWith(acc, key, v);
62
+ }
63
+ return acc;
64
+ }, {});
65
+ };
66
+ //# sourceMappingURL=query-builders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builders.js","sourceRoot":"","sources":["../../../../../server/src/services/permission/permissions-manager/query-builders.ts"],"names":[],"mappings":";;;;;;AAAA,kBAAkB;AAClB,oDAAuB;AACvB,+CAAmD;AAEnD,MAAM,YAAY,GAAG;IACnB,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;CACJ,CAAC;AAEX,MAAM,MAAM,GAAG,CAAC,GAA8B,EAAE,EAAE;IAChD,IAAI,gBAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,YAAY,EAAE;QACjE,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;KAC1B;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,OAAY,EAAE,MAAW,EAAE,KAAU,EAAE,EAAE;IAC/D,mBAAmB;IACnB,OAAO,IAAA,oBAAY,EAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AACnE,CAAC,CAAC;AAsCO,wCAAc;AApCvB,MAAM,gBAAgB,GAAG,CAAC,SAAc,EAAE,EAAE;IAC1C,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC,CAAC;AAkCuB,4CAAgB;AAhCzC,MAAM,UAAU,GAAG,CAAC,GAAQ,EAAO,EAAE;IACnC,IAAI,CAAC,gBAAC,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC5C,OAAO,GAAG,CAAC;KACZ;IACD,IAAI,gBAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAClB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3C;IAED,OAAO,gBAAC,CAAC,MAAM,CACb,GAAG,EACH,CAAC,GAAG,EAAE,CAAC,EAAE,CAAM,EAAE,EAAE;QACjB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAEtB,IAAI,gBAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;YACtB,IAAI,YAAY,IAAI,CAAC,EAAE;gBACrB,gBAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;aAC/C;iBAAM;gBACL,gBAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;aACpC;SACF;aAAM,IAAI,gBAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACvB,kBAAkB;YAClB,gBAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAChD;aAAM;YACL,gBAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;SACxB;QAED,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAAE,CACH,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ declare const _default: ({ action, ability, model }: any) => {
2
+ sanitizeOutput: (data: any, options?: any) => any;
3
+ sanitizeInput: (data: any, options?: any) => any;
4
+ sanitizeQuery: (data: any, options?: any) => any;
5
+ };
6
+ export default _default;
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ability_1 = require("@casl/ability");
4
+ const extra_1 = require("@casl/ability/extra");
5
+ const fp_1 = require("lodash/fp");
6
+ const utils_1 = require("@strapi/utils");
7
+ const user_1 = require("../../../domain/user");
8
+ const { visitors: { removePassword }, } = utils_1.sanitize;
9
+ const { constants, isScalarAttribute, getNonVisibleAttributes, getNonWritableAttributes, getWritableAttributes, } = utils_1.contentTypes;
10
+ const { ID_ATTRIBUTE, CREATED_AT_ATTRIBUTE, UPDATED_AT_ATTRIBUTE, PUBLISHED_AT_ATTRIBUTE, CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE, } = constants;
11
+ const COMPONENT_FIELDS = ['__component'];
12
+ const STATIC_FIELDS = [ID_ATTRIBUTE];
13
+ exports.default = ({ action, ability, model }) => {
14
+ const schema = strapi.getModel(model);
15
+ const { removeDisallowedFields } = utils_1.sanitize.visitors;
16
+ const createSanitizeQuery = (options = {}) => {
17
+ const { fields } = options;
18
+ // TODO: sanitize relations to admin users in all sanitizers
19
+ const permittedFields = fields.shouldIncludeAll ? null : getQueryFields(fields.permitted);
20
+ const sanitizeFilters = (0, utils_1.pipeAsync)(utils_1.traverse.traverseQueryFilters(removeDisallowedFields(permittedFields), { schema }), utils_1.traverse.traverseQueryFilters(omitDisallowedAdminUserFields, { schema }), utils_1.traverse.traverseQueryFilters(omitHiddenFields, { schema }), utils_1.traverse.traverseQueryFilters(removePassword, { schema }), utils_1.traverse.traverseQueryFilters(({ key, value }, { remove }) => {
21
+ if ((0, fp_1.isObject)(value) && (0, fp_1.isEmpty)(value)) {
22
+ remove(key);
23
+ }
24
+ }, { schema }));
25
+ const sanitizeSort = (0, utils_1.pipeAsync)(utils_1.traverse.traverseQuerySort(removeDisallowedFields(permittedFields), { schema }), utils_1.traverse.traverseQuerySort(omitDisallowedAdminUserFields, { schema }), utils_1.traverse.traverseQuerySort(omitHiddenFields, { schema }), utils_1.traverse.traverseQuerySort(removePassword, { schema }), utils_1.traverse.traverseQuerySort(({ key, attribute, value }, { remove }) => {
26
+ if (!isScalarAttribute(attribute) && (0, fp_1.isEmpty)(value)) {
27
+ remove(key);
28
+ }
29
+ }, { schema }));
30
+ const sanitizePopulate = (0, utils_1.pipeAsync)(utils_1.traverse.traverseQueryPopulate(removeDisallowedFields(permittedFields), { schema }), utils_1.traverse.traverseQueryPopulate(omitDisallowedAdminUserFields, { schema }), utils_1.traverse.traverseQueryPopulate(omitHiddenFields, { schema }), utils_1.traverse.traverseQueryPopulate(removePassword, { schema }));
31
+ const sanitizeFields = (0, utils_1.pipeAsync)(utils_1.traverse.traverseQueryFields(removeDisallowedFields(permittedFields), { schema }), utils_1.traverse.traverseQueryFields(omitHiddenFields, { schema }), utils_1.traverse.traverseQueryFields(removePassword, { schema }));
32
+ return async (query) => {
33
+ const sanitizedQuery = (0, fp_1.cloneDeep)(query);
34
+ if (query.filters) {
35
+ Object.assign(sanitizedQuery, { filters: await sanitizeFilters(query.filters) });
36
+ }
37
+ if (query.sort) {
38
+ Object.assign(sanitizedQuery, { sort: await sanitizeSort(query.sort) });
39
+ }
40
+ if (query.populate) {
41
+ Object.assign(sanitizedQuery, { populate: await sanitizePopulate(query.populate) });
42
+ }
43
+ if (query.fields) {
44
+ Object.assign(sanitizedQuery, { fields: await sanitizeFields(query.fields) });
45
+ }
46
+ return sanitizedQuery;
47
+ };
48
+ };
49
+ const createSanitizeOutput = (options = {}) => {
50
+ const { fields } = options;
51
+ const permittedFields = fields.shouldIncludeAll ? null : getOutputFields(fields.permitted);
52
+ return (0, utils_1.pipeAsync)(
53
+ // Remove fields hidden from the admin
54
+ (0, utils_1.traverseEntity)(omitHiddenFields, { schema }),
55
+ // Remove unallowed fields from admin::user relations
56
+ // @ts-expect-error
57
+ (0, utils_1.traverseEntity)(pickAllowedAdminUserFields, { schema }),
58
+ // Remove not allowed fields (RBAC)
59
+ (0, utils_1.traverseEntity)(removeDisallowedFields(permittedFields), { schema }),
60
+ // Remove all fields of type 'password'
61
+ utils_1.sanitize.sanitizers.sanitizePasswords(schema));
62
+ };
63
+ const createSanitizeInput = (options = {}) => {
64
+ const { fields } = options;
65
+ const permittedFields = fields.shouldIncludeAll ? null : getInputFields(fields.permitted);
66
+ return (0, utils_1.pipeAsync)(
67
+ // Remove fields hidden from the admin
68
+ (0, utils_1.traverseEntity)(omitHiddenFields, { schema }),
69
+ // Remove not allowed fields (RBAC)
70
+ // @ts-expect-error
71
+ (0, utils_1.traverseEntity)(removeDisallowedFields(permittedFields), { schema }),
72
+ // Remove roles from createdBy & updateBy fields
73
+ omitCreatorRoles);
74
+ };
75
+ const wrapSanitize = (createSanitizeFunction) => {
76
+ // @ts-expect-error
77
+ const wrappedSanitize = async (data, options = {}) => {
78
+ if ((0, fp_1.isArray)(data)) {
79
+ return Promise.all(data.map((entity) => wrappedSanitize(entity, options)));
80
+ }
81
+ const { subject, action: actionOverride } = getDefaultOptions(data, options);
82
+ const permittedFields = (0, extra_1.permittedFieldsOf)(ability, actionOverride, subject, {
83
+ fieldsFrom: (rule) => rule.fields || [],
84
+ });
85
+ const hasAtLeastOneRegistered = (0, fp_1.some)((fields) => !(0, fp_1.isNil)(fields), (0, fp_1.flatMap)((0, fp_1.prop)('fields'), ability.rulesFor(actionOverride, (0, ability_1.detectSubjectType)(subject))));
86
+ const shouldIncludeAllFields = (0, fp_1.isEmpty)(permittedFields) && !hasAtLeastOneRegistered;
87
+ const sanitizeOptions = {
88
+ ...options,
89
+ fields: {
90
+ shouldIncludeAll: shouldIncludeAllFields,
91
+ permitted: permittedFields,
92
+ hasAtLeastOneRegistered,
93
+ },
94
+ };
95
+ const sanitizeFunction = createSanitizeFunction(sanitizeOptions);
96
+ return sanitizeFunction(data);
97
+ };
98
+ return wrappedSanitize;
99
+ };
100
+ const getDefaultOptions = (data, options) => {
101
+ return (0, fp_1.defaults)({ subject: (0, ability_1.subject)(model, data), action }, options);
102
+ };
103
+ /**
104
+ * Omit creator fields' (createdBy & updatedBy) roles from the admin API responses
105
+ */
106
+ const omitCreatorRoles = (0, fp_1.omit)([`${CREATED_BY_ATTRIBUTE}.roles`, `${UPDATED_BY_ATTRIBUTE}.roles`]);
107
+ /**
108
+ * Visitor used to remove hidden fields from the admin API responses
109
+ */
110
+ const omitHiddenFields = ({ key, schema }, { remove }) => {
111
+ const isHidden = (0, fp_1.getOr)(false, ['config', 'attributes', key, 'hidden'], schema);
112
+ if (isHidden) {
113
+ remove(key);
114
+ }
115
+ };
116
+ /**
117
+ * Visitor used to only select needed fields from the admin users entities & avoid leaking sensitive information
118
+ */
119
+ const pickAllowedAdminUserFields = ({ attribute, key, value }, { set }) => {
120
+ const pickAllowedFields = (0, fp_1.pick)(user_1.ADMIN_USER_ALLOWED_FIELDS);
121
+ if (attribute.type === 'relation' && attribute.target === 'admin::user' && value) {
122
+ if (Array.isArray(value)) {
123
+ set(key, value.map(pickAllowedFields));
124
+ }
125
+ else {
126
+ set(key, pickAllowedFields(value));
127
+ }
128
+ }
129
+ };
130
+ /**
131
+ * Visitor used to omit disallowed fields from the admin users entities & avoid leaking sensitive information
132
+ */
133
+ const omitDisallowedAdminUserFields = ({ key, attribute, schema }, { remove }) => {
134
+ if (schema.uid === 'admin::user' && attribute && !user_1.ADMIN_USER_ALLOWED_FIELDS.includes(key)) {
135
+ remove(key);
136
+ }
137
+ };
138
+ const getInputFields = (fields = []) => {
139
+ const nonVisibleAttributes = getNonVisibleAttributes(schema);
140
+ const writableAttributes = getWritableAttributes(schema);
141
+ const nonVisibleWritableAttributes = (0, fp_1.intersection)(nonVisibleAttributes, writableAttributes);
142
+ return (0, fp_1.uniq)([
143
+ ...fields,
144
+ ...STATIC_FIELDS,
145
+ ...COMPONENT_FIELDS,
146
+ ...nonVisibleWritableAttributes,
147
+ ]);
148
+ };
149
+ const getOutputFields = (fields = []) => {
150
+ const nonWritableAttributes = getNonWritableAttributes(schema);
151
+ const nonVisibleAttributes = getNonVisibleAttributes(schema);
152
+ return (0, fp_1.uniq)([
153
+ ...fields,
154
+ ...STATIC_FIELDS,
155
+ ...COMPONENT_FIELDS,
156
+ ...nonWritableAttributes,
157
+ ...nonVisibleAttributes,
158
+ CREATED_AT_ATTRIBUTE,
159
+ UPDATED_AT_ATTRIBUTE,
160
+ ]);
161
+ };
162
+ const getQueryFields = (fields = []) => {
163
+ const nonVisibleAttributes = getNonVisibleAttributes(schema);
164
+ const writableAttributes = getWritableAttributes(schema);
165
+ const nonVisibleWritableAttributes = (0, fp_1.intersection)(nonVisibleAttributes, writableAttributes);
166
+ return (0, fp_1.uniq)([
167
+ ...fields,
168
+ ...STATIC_FIELDS,
169
+ ...COMPONENT_FIELDS,
170
+ ...nonVisibleWritableAttributes,
171
+ CREATED_AT_ATTRIBUTE,
172
+ UPDATED_AT_ATTRIBUTE,
173
+ PUBLISHED_AT_ATTRIBUTE,
174
+ CREATED_BY_ATTRIBUTE,
175
+ UPDATED_BY_ATTRIBUTE,
176
+ ]);
177
+ };
178
+ return {
179
+ sanitizeOutput: wrapSanitize(createSanitizeOutput),
180
+ sanitizeInput: wrapSanitize(createSanitizeInput),
181
+ sanitizeQuery: wrapSanitize(createSanitizeQuery),
182
+ };
183
+ };
184
+ //# sourceMappingURL=sanitize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../../../../../server/src/services/permission/permissions-manager/sanitize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ declare const _default: ({ action, ability, model }: any) => {
2
+ validateQuery: (data: any, options?: {}) => any;
3
+ validateInput: (data: any, options?: {}) => any;
4
+ };
5
+ export default _default;
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ability_1 = require("@casl/ability");
4
+ const extra_1 = require("@casl/ability/extra");
5
+ const fp_1 = require("lodash/fp");
6
+ const utils_1 = require("@strapi/utils");
7
+ const user_1 = require("../../../domain/user");
8
+ const { ValidationError } = utils_1.errors;
9
+ const { throwPassword, throwDisallowedFields } = utils_1.validate.visitors;
10
+ const { constants, isScalarAttribute, getNonVisibleAttributes, getWritableAttributes } = utils_1.contentTypes;
11
+ const { ID_ATTRIBUTE, CREATED_AT_ATTRIBUTE, UPDATED_AT_ATTRIBUTE, PUBLISHED_AT_ATTRIBUTE, CREATED_BY_ATTRIBUTE, UPDATED_BY_ATTRIBUTE, } = constants;
12
+ const COMPONENT_FIELDS = ['__component'];
13
+ const STATIC_FIELDS = [ID_ATTRIBUTE];
14
+ const throwInvalidParam = ({ key }) => {
15
+ throw new ValidationError(`Invalid parameter ${key}`);
16
+ };
17
+ exports.default = ({ action, ability, model }) => {
18
+ const schema = strapi.getModel(model);
19
+ const createValidateQuery = (options = {}) => {
20
+ const { fields } = options;
21
+ // TODO: validate relations to admin users in all validators
22
+ const permittedFields = fields.shouldIncludeAll ? null : getQueryFields(fields.permitted);
23
+ const validateFilters = (0, utils_1.pipeAsync)(utils_1.traverse.traverseQueryFilters(throwDisallowedFields(permittedFields), { schema }), utils_1.traverse.traverseQueryFilters(throwDisallowedAdminUserFields, { schema }), utils_1.traverse.traverseQueryFilters(throwPassword, { schema }), utils_1.traverse.traverseQueryFilters(({ key, value }) => {
24
+ if ((0, fp_1.isObject)(value) && (0, fp_1.isEmpty)(value)) {
25
+ throwInvalidParam({ key });
26
+ }
27
+ }, { schema }));
28
+ const validateSort = (0, utils_1.pipeAsync)(utils_1.traverse.traverseQuerySort(throwDisallowedFields(permittedFields), { schema }), utils_1.traverse.traverseQuerySort(throwDisallowedAdminUserFields, { schema }), utils_1.traverse.traverseQuerySort(throwPassword, { schema }), utils_1.traverse.traverseQuerySort(({ key, attribute, value }) => {
29
+ if (!isScalarAttribute(attribute) && (0, fp_1.isEmpty)(value)) {
30
+ throwInvalidParam({ key });
31
+ }
32
+ }, { schema }));
33
+ const validateFields = (0, utils_1.pipeAsync)(utils_1.traverse.traverseQueryFields(throwDisallowedFields(permittedFields), { schema }), utils_1.traverse.traverseQueryFields(throwPassword, { schema }));
34
+ return async (query) => {
35
+ if (query.filters) {
36
+ await validateFilters(query.filters);
37
+ }
38
+ if (query.sort) {
39
+ await validateSort(query.sort);
40
+ }
41
+ if (query.fields) {
42
+ await validateFields(query.fields);
43
+ }
44
+ return true;
45
+ };
46
+ };
47
+ const createValidateInput = (options = {}) => {
48
+ const { fields } = options;
49
+ const permittedFields = fields.shouldIncludeAll ? null : getInputFields(fields.permitted);
50
+ return (0, utils_1.pipeAsync)(
51
+ // Remove fields hidden from the admin
52
+ (0, utils_1.traverseEntity)(throwHiddenFields, { schema }),
53
+ // Remove not allowed fields (RBAC)
54
+ // @ts-expect-error
55
+ (0, utils_1.traverseEntity)(throwDisallowedFields(permittedFields), { schema }),
56
+ // Remove roles from createdBy & updatedBy fields
57
+ omitCreatorRoles);
58
+ };
59
+ const wrapValidate = (createValidateFunction) => {
60
+ // @ts-expect-error
61
+ const wrappedValidate = async (data, options = {}) => {
62
+ if ((0, fp_1.isArray)(data)) {
63
+ return Promise.all(data.map((entity) => wrappedValidate(entity, options)));
64
+ }
65
+ const { subject, action: actionOverride } = getDefaultOptions(data, options);
66
+ const permittedFields = (0, extra_1.permittedFieldsOf)(ability, actionOverride, subject, {
67
+ fieldsFrom: (rule) => rule.fields || [],
68
+ });
69
+ const hasAtLeastOneRegistered = (0, fp_1.some)((fields) => !(0, fp_1.isNil)(fields), (0, fp_1.flatMap)((0, fp_1.prop)('fields'), ability.rulesFor(actionOverride, (0, ability_1.detectSubjectType)(subject))));
70
+ const shouldIncludeAllFields = (0, fp_1.isEmpty)(permittedFields) && !hasAtLeastOneRegistered;
71
+ const validateOptions = {
72
+ ...options,
73
+ fields: {
74
+ shouldIncludeAll: shouldIncludeAllFields,
75
+ permitted: permittedFields,
76
+ hasAtLeastOneRegistered,
77
+ },
78
+ };
79
+ const validateFunction = createValidateFunction(validateOptions);
80
+ return validateFunction(data);
81
+ };
82
+ return wrappedValidate;
83
+ };
84
+ const getDefaultOptions = (data, options) => {
85
+ return (0, fp_1.defaults)({ subject: (0, ability_1.subject)(model, data), action }, options);
86
+ };
87
+ /**
88
+ * Omit creator fields' (createdBy & updatedBy) roles from the admin API responses
89
+ */
90
+ const omitCreatorRoles = (0, fp_1.omit)([`${CREATED_BY_ATTRIBUTE}.roles`, `${UPDATED_BY_ATTRIBUTE}.roles`]);
91
+ /**
92
+ * Visitor used to remove hidden fields from the admin API responses
93
+ */
94
+ const throwHiddenFields = ({ key, schema }) => {
95
+ const isHidden = (0, fp_1.getOr)(false, ['config', 'attributes', key, 'hidden'], schema);
96
+ if (isHidden) {
97
+ throwInvalidParam({ key });
98
+ }
99
+ };
100
+ /**
101
+ * Visitor used to omit disallowed fields from the admin users entities & avoid leaking sensitive information
102
+ */
103
+ const throwDisallowedAdminUserFields = ({ key, attribute, schema }) => {
104
+ if (schema.uid === 'admin::user' && attribute && !user_1.ADMIN_USER_ALLOWED_FIELDS.includes(key)) {
105
+ throwInvalidParam({ key });
106
+ }
107
+ };
108
+ const getInputFields = (fields = []) => {
109
+ const nonVisibleAttributes = getNonVisibleAttributes(schema);
110
+ const writableAttributes = getWritableAttributes(schema);
111
+ const nonVisibleWritableAttributes = (0, fp_1.intersection)(nonVisibleAttributes, writableAttributes);
112
+ return (0, fp_1.uniq)([
113
+ ...fields,
114
+ ...STATIC_FIELDS,
115
+ ...COMPONENT_FIELDS,
116
+ ...nonVisibleWritableAttributes,
117
+ ]);
118
+ };
119
+ const getQueryFields = (fields = []) => {
120
+ return (0, fp_1.uniq)([
121
+ ...fields,
122
+ ...STATIC_FIELDS,
123
+ ...COMPONENT_FIELDS,
124
+ CREATED_AT_ATTRIBUTE,
125
+ UPDATED_AT_ATTRIBUTE,
126
+ PUBLISHED_AT_ATTRIBUTE,
127
+ ]);
128
+ };
129
+ return {
130
+ validateQuery: wrapValidate(createValidateQuery),
131
+ validateInput: wrapValidate(createValidateInput),
132
+ };
133
+ };
134
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../../../server/src/services/permission/permissions-manager/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Delete permissions of roles in database
3
+ * @param rolesIds ids of roles
4
+ * @returns {Promise<array>}
5
+ */
6
+ export declare const deleteByRolesIds: (rolesIds: string[]) => Promise<void>;
7
+ /**
8
+ * Delete permissions
9
+ * @param ids ids of permissions
10
+ * @returns {Promise<array>}
11
+ */
12
+ export declare const deleteByIds: (ids: string[]) => Promise<void>;
13
+ /**
14
+ * Create many permissions
15
+ * @param permissions
16
+ * @returns {Promise<*[]|*>}
17
+ */
18
+ export declare const createMany: (permissions: any) => Promise<import("../../domain/permission/index").Permission>;
19
+ /**
20
+ * Find assigned permissions in the database
21
+ * @param params query params to find the permissions
22
+ * @returns {Promise<Permission[]>}
23
+ */
24
+ export declare const findMany: (params?: {}) => Promise<import("../../domain/permission/index").Permission>;
25
+ /**
26
+ * Find all permissions for a user
27
+ * @param user - user
28
+ * @returns {Promise<Permission[]>}
29
+ */
30
+ export declare const findUserPermissions: (user: any) => Promise<import("../../domain/permission/index").Permission>;
31
+ /**
32
+ * Removes permissions in database that don't exist anymore
33
+ * @returns {Promise<>}
34
+ */
35
+ export declare const cleanPermissionsInDatabase: () => Promise<void>;
36
+ declare const _default: {
37
+ createMany: (permissions: any) => Promise<import("../../domain/permission/index").Permission>;
38
+ findMany: (params?: {}) => Promise<import("../../domain/permission/index").Permission>;
39
+ deleteByRolesIds: (rolesIds: string[]) => Promise<void>;
40
+ deleteByIds: (ids: string[]) => Promise<void>;
41
+ findUserPermissions: (user: any) => Promise<import("../../domain/permission/index").Permission>;
42
+ cleanPermissionsInDatabase: () => Promise<void>;
43
+ };
44
+ export default _default;
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.cleanPermissionsInDatabase = exports.findUserPermissions = exports.findMany = exports.createMany = exports.deleteByIds = exports.deleteByRolesIds = void 0;
7
+ const fp_1 = require("lodash/fp");
8
+ const p_map_1 = __importDefault(require("p-map"));
9
+ const utils_1 = require("../../utils");
10
+ const index_1 = __importDefault(require("../../domain/permission/index"));
11
+ /**
12
+ * Delete permissions of roles in database
13
+ * @param rolesIds ids of roles
14
+ * @returns {Promise<array>}
15
+ */
16
+ const deleteByRolesIds = async (rolesIds) => {
17
+ const permissionsToDelete = await strapi.query('admin::permission').findMany({
18
+ select: ['id'],
19
+ where: {
20
+ role: { id: rolesIds },
21
+ },
22
+ });
23
+ if (permissionsToDelete.length > 0) {
24
+ await (0, exports.deleteByIds)(permissionsToDelete.map((0, fp_1.prop)('id')));
25
+ }
26
+ };
27
+ exports.deleteByRolesIds = deleteByRolesIds;
28
+ /**
29
+ * Delete permissions
30
+ * @param ids ids of permissions
31
+ * @returns {Promise<array>}
32
+ */
33
+ const deleteByIds = async (ids) => {
34
+ const result = [];
35
+ for (const id of ids) {
36
+ const queryResult = await strapi.query('admin::permission').delete({ where: { id } });
37
+ result.push(queryResult);
38
+ }
39
+ strapi.eventHub.emit('permission.delete', { permissions: result });
40
+ };
41
+ exports.deleteByIds = deleteByIds;
42
+ /**
43
+ * Create many permissions
44
+ * @param permissions
45
+ * @returns {Promise<*[]|*>}
46
+ */
47
+ const createMany = async (permissions) => {
48
+ const createdPermissions = [];
49
+ for (const permission of permissions) {
50
+ const newPerm = await strapi.query('admin::permission').create({ data: permission });
51
+ createdPermissions.push(newPerm);
52
+ }
53
+ const permissionsToReturn = index_1.default.toPermission(createdPermissions);
54
+ strapi.eventHub.emit('permission.create', { permissions: permissionsToReturn });
55
+ return permissionsToReturn;
56
+ };
57
+ exports.createMany = createMany;
58
+ /**
59
+ * Update a permission
60
+ * @returns {Promise<*[]|*>}
61
+ * @param params
62
+ * @param attributes
63
+ */
64
+ const update = async (params, attributes) => {
65
+ const updatedPermission = await strapi
66
+ .query('admin::permission')
67
+ .update({ where: params, data: attributes });
68
+ const permissionToReturn = index_1.default.toPermission(updatedPermission);
69
+ strapi.eventHub.emit('permission.update', { permissions: permissionToReturn });
70
+ return permissionToReturn;
71
+ };
72
+ /**
73
+ * Find assigned permissions in the database
74
+ * @param params query params to find the permissions
75
+ * @returns {Promise<Permission[]>}
76
+ */
77
+ const findMany = async (params = {}) => {
78
+ const rawPermissions = await strapi.query('admin::permission').findMany(params);
79
+ return index_1.default.toPermission(rawPermissions);
80
+ };
81
+ exports.findMany = findMany;
82
+ /**
83
+ * Find all permissions for a user
84
+ * @param user - user
85
+ * @returns {Promise<Permission[]>}
86
+ */
87
+ const findUserPermissions = async (user) => {
88
+ return (0, exports.findMany)({ where: { role: { users: { id: user.id } } } });
89
+ };
90
+ exports.findUserPermissions = findUserPermissions;
91
+ const filterPermissionsToRemove = async (permissions) => {
92
+ const { actionProvider } = (0, utils_1.getService)('permission');
93
+ const permissionsToRemove = [];
94
+ for (const permission of permissions) {
95
+ const { subjects, options = {} } = actionProvider.get(permission.action) || {};
96
+ const { applyToProperties } = options;
97
+ const invalidProperties = await Promise.all((applyToProperties || []).map(async (property) => {
98
+ const applies = await actionProvider.appliesToProperty(property, permission.action, permission.subject);
99
+ return applies && (0, fp_1.isNil)(index_1.default.getProperty(property, permission));
100
+ }));
101
+ const isRegisteredAction = actionProvider.has(permission.action);
102
+ const hasInvalidProperties = (0, fp_1.isArray)(applyToProperties) && invalidProperties.every((0, fp_1.eq)(true));
103
+ const isInvalidSubject = (0, fp_1.isArray)(subjects) && !subjects.includes(permission.subject);
104
+ // If the permission has an invalid action, an invalid subject or invalid properties, then add it to the toBeRemoved collection
105
+ if (!isRegisteredAction || isInvalidSubject || hasInvalidProperties) {
106
+ permissionsToRemove.push(permission);
107
+ }
108
+ }
109
+ return permissionsToRemove;
110
+ };
111
+ /**
112
+ * Removes permissions in database that don't exist anymore
113
+ * @returns {Promise<>}
114
+ */
115
+ const cleanPermissionsInDatabase = async () => {
116
+ const pageSize = 200;
117
+ const contentTypeService = (0, utils_1.getService)('content-type');
118
+ const total = await strapi.query('admin::permission').count();
119
+ const pageCount = Math.ceil(total / pageSize);
120
+ for (let page = 0; page < pageCount; page += 1) {
121
+ // 1. Find invalid permissions and collect their ID to delete them later
122
+ const results = await strapi
123
+ .query('admin::permission')
124
+ .findMany({ limit: pageSize, offset: page * pageSize });
125
+ const permissions = index_1.default.toPermission(results);
126
+ const permissionsToRemove = await filterPermissionsToRemove(permissions);
127
+ const permissionsIdToRemove = (0, fp_1.map)((0, fp_1.prop)('id'), permissionsToRemove);
128
+ // 2. Clean permissions' fields (add required ones, remove the non-existing ones)
129
+ // @ts-expect-error - Make toPermission return an array if the input was an array
130
+ const remainingPermissions = permissions.filter((permission) => !permissionsIdToRemove.includes(permission.id));
131
+ const permissionsWithCleanFields = contentTypeService.cleanPermissionFields(remainingPermissions);
132
+ // Update only the ones that need to be updated
133
+ const permissionsNeedingToBeUpdated = (0, fp_1.differenceWith)((a, b) => {
134
+ return a.id === b.id && (0, fp_1.xor)(a.properties.fields, b.properties.fields).length === 0;
135
+ }, permissionsWithCleanFields, remainingPermissions);
136
+ const updatePromiseProvider = (permission) => {
137
+ return update({ id: permission.id }, permission);
138
+ };
139
+ // Execute all the queries, update the database
140
+ await Promise.all([
141
+ (0, exports.deleteByIds)(permissionsIdToRemove),
142
+ // @ts-ignore
143
+ (0, p_map_1.default)(permissionsNeedingToBeUpdated, updatePromiseProvider, {
144
+ concurrency: 100,
145
+ stopOnError: true,
146
+ }),
147
+ ]);
148
+ }
149
+ };
150
+ exports.cleanPermissionsInDatabase = cleanPermissionsInDatabase;
151
+ exports.default = {
152
+ createMany: exports.createMany,
153
+ findMany: exports.findMany,
154
+ deleteByRolesIds: exports.deleteByRolesIds,
155
+ deleteByIds: exports.deleteByIds,
156
+ findUserPermissions: exports.findUserPermissions,
157
+ cleanPermissionsInDatabase: exports.cleanPermissionsInDatabase,
158
+ };
159
+ //# sourceMappingURL=queries.js.map