@strapi/admin 5.44.0 → 5.45.0

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 (334) hide show
  1. package/dist/admin/admin/src/components/Table.js.map +1 -1
  2. package/dist/admin/admin/src/components/Table.mjs.map +1 -1
  3. package/dist/admin/admin/src/constants.js +49 -0
  4. package/dist/admin/admin/src/constants.js.map +1 -1
  5. package/dist/admin/admin/src/constants.mjs +49 -0
  6. package/dist/admin/admin/src/constants.mjs.map +1 -1
  7. package/dist/admin/admin/src/core/apis/router.js +4 -4
  8. package/dist/admin/admin/src/core/apis/router.js.map +1 -1
  9. package/dist/admin/admin/src/core/apis/router.mjs +4 -4
  10. package/dist/admin/admin/src/core/apis/router.mjs.map +1 -1
  11. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  12. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  13. package/dist/admin/admin/src/pages/Settings/{pages/ApiTokens/EditView/components → components/Tokens}/FormApiTokenContainer.js +48 -11
  14. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.js.map +1 -0
  15. package/dist/admin/admin/src/pages/Settings/{pages/ApiTokens/EditView/components → components/Tokens}/FormApiTokenContainer.mjs +49 -12
  16. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.mjs.map +1 -0
  17. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +1 -1
  18. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
  19. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs +1 -1
  20. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs.map +1 -1
  21. package/dist/admin/admin/src/pages/Settings/components/Tokens/LifeSpanInput.js +1 -1
  22. package/dist/admin/admin/src/pages/Settings/components/Tokens/LifeSpanInput.js.map +1 -1
  23. package/dist/admin/admin/src/pages/Settings/components/Tokens/LifeSpanInput.mjs +1 -1
  24. package/dist/admin/admin/src/pages/Settings/components/Tokens/LifeSpanInput.mjs.map +1 -1
  25. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +21 -1
  26. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
  27. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs +21 -1
  28. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs.map +1 -1
  29. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +1 -1
  30. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js.map +1 -1
  31. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs +1 -1
  32. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs.map +1 -1
  33. package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.js +33 -0
  34. package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.js.map +1 -1
  35. package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.mjs +14 -1
  36. package/dist/admin/admin/src/pages/Settings/components/Tokens/constants.mjs.map +1 -1
  37. package/dist/admin/admin/src/pages/Settings/{pages/ApiTokens/EditView → components/Tokens}/utils/getDateOfExpiration.js +1 -1
  38. package/dist/admin/admin/src/pages/Settings/components/Tokens/utils/getDateOfExpiration.js.map +1 -0
  39. package/dist/admin/admin/src/pages/Settings/{pages/ApiTokens/EditView → components/Tokens}/utils/getDateOfExpiration.mjs +1 -1
  40. package/dist/admin/admin/src/pages/Settings/components/Tokens/utils/getDateOfExpiration.mjs.map +1 -0
  41. package/dist/admin/admin/src/pages/Settings/constants.js +182 -151
  42. package/dist/admin/admin/src/pages/Settings/constants.js.map +1 -1
  43. package/dist/admin/admin/src/pages/Settings/constants.mjs +182 -151
  44. package/dist/admin/admin/src/pages/Settings/constants.mjs.map +1 -1
  45. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/CreateView.js +17 -0
  46. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/CreateView.js.map +1 -0
  47. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/CreateView.mjs +15 -0
  48. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/CreateView.mjs.map +1 -0
  49. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.js +314 -0
  50. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.js.map +1 -0
  51. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.mjs +292 -0
  52. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.mjs.map +1 -0
  53. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.js +70 -0
  54. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.js.map +1 -0
  55. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.mjs +49 -0
  56. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.mjs.map +1 -0
  57. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.js +254 -0
  58. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.js.map +1 -0
  59. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.mjs +231 -0
  60. package/dist/admin/admin/src/pages/Settings/pages/AdminTokens/ListView.mjs.map +1 -0
  61. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js +42 -33
  62. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
  63. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs +43 -34
  64. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs.map +1 -1
  65. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +3 -2
  66. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
  67. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs +3 -2
  68. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
  69. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js +23 -12
  70. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js.map +1 -1
  71. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs +23 -12
  72. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs.map +1 -1
  73. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js +124 -35
  74. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js.map +1 -1
  75. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs +126 -37
  76. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs.map +1 -1
  77. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js +24 -9
  78. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js.map +1 -1
  79. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs +24 -9
  80. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs.map +1 -1
  81. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js +5 -3
  82. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js.map +1 -1
  83. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs +5 -3
  84. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs.map +1 -1
  85. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +171 -36
  86. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
  87. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs +172 -37
  88. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs.map +1 -1
  89. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js +5 -3
  90. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
  91. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs +5 -3
  92. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs.map +1 -1
  93. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js +59 -1
  94. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js.map +1 -1
  95. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.mjs +40 -1
  96. package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.mjs.map +1 -1
  97. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createPermissionChecker.js +89 -0
  98. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createPermissionChecker.js.map +1 -0
  99. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createPermissionChecker.mjs +86 -0
  100. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createPermissionChecker.mjs.map +1 -0
  101. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateValues.js +35 -9
  102. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateValues.js.map +1 -1
  103. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateValues.mjs +35 -10
  104. package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateValues.mjs.map +1 -1
  105. package/dist/admin/admin/src/render.js +6 -3
  106. package/dist/admin/admin/src/render.js.map +1 -1
  107. package/dist/admin/admin/src/render.mjs +6 -3
  108. package/dist/admin/admin/src/render.mjs.map +1 -1
  109. package/dist/admin/admin/src/router.js +4 -4
  110. package/dist/admin/admin/src/router.js.map +1 -1
  111. package/dist/admin/admin/src/router.mjs +1 -1
  112. package/dist/admin/admin/src/router.mjs.map +1 -1
  113. package/dist/admin/admin/src/services/apiTokens.js +85 -2
  114. package/dist/admin/admin/src/services/apiTokens.js.map +1 -1
  115. package/dist/admin/admin/src/services/apiTokens.mjs +80 -3
  116. package/dist/admin/admin/src/services/apiTokens.mjs.map +1 -1
  117. package/dist/admin/admin/src/translations/en.json.js +16 -1
  118. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  119. package/dist/admin/admin/src/translations/en.json.mjs +16 -1
  120. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  121. package/dist/admin/admin/src/utils/getFetchClient.js +4 -1
  122. package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
  123. package/dist/admin/admin/src/utils/getFetchClient.mjs +4 -1
  124. package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
  125. package/dist/admin/admin/tests/server.js +99 -21
  126. package/dist/admin/admin/tests/server.js.map +1 -1
  127. package/dist/admin/admin/tests/server.mjs +99 -21
  128. package/dist/admin/admin/tests/server.mjs.map +1 -1
  129. package/dist/admin/src/constants.d.ts +26 -0
  130. package/dist/admin/src/core/apis/router.d.ts +1 -1
  131. package/dist/admin/src/features/Tracking.d.ts +2 -1
  132. package/dist/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.d.ts +24 -0
  133. package/dist/admin/src/pages/Settings/components/Tokens/Table.d.ts +2 -1
  134. package/dist/admin/src/pages/Settings/components/Tokens/constants.d.ts +17 -0
  135. package/dist/admin/src/pages/Settings/constants.d.ts +1 -1
  136. package/dist/admin/src/pages/Settings/pages/AdminTokens/CreateView.d.ts +1 -0
  137. package/dist/admin/src/pages/Settings/pages/AdminTokens/EditView/EditViewPage.d.ts +2 -0
  138. package/dist/admin/src/pages/Settings/pages/AdminTokens/EditView/components/AdminPermissions.d.ts +13 -0
  139. package/dist/admin/src/pages/Settings/pages/AdminTokens/ListView.d.ts +2 -0
  140. package/dist/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.d.ts +4 -3
  141. package/dist/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.d.ts +3 -1
  142. package/dist/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.d.ts +1 -0
  143. package/dist/admin/src/pages/Settings/pages/Roles/components/Permissions.d.ts +5 -0
  144. package/dist/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.d.ts +8 -7
  145. package/dist/admin/src/pages/Settings/pages/Roles/utils/createPermissionChecker.d.ts +27 -0
  146. package/dist/admin/src/pages/Settings/pages/Roles/utils/updateValues.d.ts +8 -2
  147. package/dist/admin/src/services/apiTokens.d.ts +5 -2
  148. package/dist/admin/src/types/permissions.d.ts +1 -1
  149. package/dist/server/server/src/bootstrap.js +37 -5
  150. package/dist/server/server/src/bootstrap.js.map +1 -1
  151. package/dist/server/server/src/bootstrap.mjs +37 -5
  152. package/dist/server/server/src/bootstrap.mjs.map +1 -1
  153. package/dist/server/server/src/config/admin-actions.js +48 -0
  154. package/dist/server/server/src/config/admin-actions.js.map +1 -1
  155. package/dist/server/server/src/config/admin-actions.mjs +48 -0
  156. package/dist/server/server/src/config/admin-actions.mjs.map +1 -1
  157. package/dist/server/server/src/content-types/Permission.js +10 -1
  158. package/dist/server/server/src/content-types/Permission.js.map +1 -1
  159. package/dist/server/server/src/content-types/Permission.mjs +10 -1
  160. package/dist/server/server/src/content-types/Permission.mjs.map +1 -1
  161. package/dist/server/server/src/content-types/User.js +8 -0
  162. package/dist/server/server/src/content-types/User.js.map +1 -1
  163. package/dist/server/server/src/content-types/User.mjs +8 -0
  164. package/dist/server/server/src/content-types/User.mjs.map +1 -1
  165. package/dist/server/server/src/content-types/api-token.js +27 -1
  166. package/dist/server/server/src/content-types/api-token.js.map +1 -1
  167. package/dist/server/server/src/content-types/api-token.mjs +27 -1
  168. package/dist/server/server/src/content-types/api-token.mjs.map +1 -1
  169. package/dist/server/server/src/controllers/admin-token.js +194 -0
  170. package/dist/server/server/src/controllers/admin-token.js.map +1 -0
  171. package/dist/server/server/src/controllers/admin-token.mjs +192 -0
  172. package/dist/server/server/src/controllers/admin-token.mjs.map +1 -0
  173. package/dist/server/server/src/controllers/api-token.js +48 -47
  174. package/dist/server/server/src/controllers/api-token.js.map +1 -1
  175. package/dist/server/server/src/controllers/api-token.mjs +48 -47
  176. package/dist/server/server/src/controllers/api-token.mjs.map +1 -1
  177. package/dist/server/server/src/controllers/index.js +2 -0
  178. package/dist/server/server/src/controllers/index.js.map +1 -1
  179. package/dist/server/server/src/controllers/index.mjs +2 -0
  180. package/dist/server/server/src/controllers/index.mjs.map +1 -1
  181. package/dist/server/server/src/domain/permission/index.js +2 -1
  182. package/dist/server/server/src/domain/permission/index.js.map +1 -1
  183. package/dist/server/server/src/domain/permission/index.mjs +2 -1
  184. package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
  185. package/dist/server/server/src/policies/index.js +2 -0
  186. package/dist/server/server/src/policies/index.js.map +1 -1
  187. package/dist/server/server/src/policies/index.mjs +2 -0
  188. package/dist/server/server/src/policies/index.mjs.map +1 -1
  189. package/dist/server/server/src/policies/isAdminTokensEnabled.js +16 -0
  190. package/dist/server/server/src/policies/isAdminTokensEnabled.js.map +1 -0
  191. package/dist/server/server/src/policies/isAdminTokensEnabled.mjs +14 -0
  192. package/dist/server/server/src/policies/isAdminTokensEnabled.mjs.map +1 -0
  193. package/dist/server/server/src/register.js +4 -2
  194. package/dist/server/server/src/register.js.map +1 -1
  195. package/dist/server/server/src/register.mjs +4 -2
  196. package/dist/server/server/src/register.mjs.map +1 -1
  197. package/dist/server/server/src/routes/admin-tokens.js +140 -0
  198. package/dist/server/server/src/routes/admin-tokens.js.map +1 -0
  199. package/dist/server/server/src/routes/admin-tokens.mjs +138 -0
  200. package/dist/server/server/src/routes/admin-tokens.mjs.map +1 -0
  201. package/dist/server/server/src/routes/index.js +2 -0
  202. package/dist/server/server/src/routes/index.js.map +1 -1
  203. package/dist/server/server/src/routes/index.mjs +2 -0
  204. package/dist/server/server/src/routes/index.mjs.map +1 -1
  205. package/dist/server/server/src/services/api-token.js +805 -101
  206. package/dist/server/server/src/services/api-token.js.map +1 -1
  207. package/dist/server/server/src/services/api-token.mjs +800 -101
  208. package/dist/server/server/src/services/api-token.mjs.map +1 -1
  209. package/dist/server/server/src/services/constants.js +2 -0
  210. package/dist/server/server/src/services/constants.js.map +1 -1
  211. package/dist/server/server/src/services/constants.mjs +2 -0
  212. package/dist/server/server/src/services/constants.mjs.map +1 -1
  213. package/dist/server/server/src/services/homepage.js +1 -1
  214. package/dist/server/server/src/services/homepage.js.map +1 -1
  215. package/dist/server/server/src/services/homepage.mjs +1 -1
  216. package/dist/server/server/src/services/homepage.mjs.map +1 -1
  217. package/dist/server/server/src/services/index.js +2 -1
  218. package/dist/server/server/src/services/index.js.map +1 -1
  219. package/dist/server/server/src/services/index.mjs +3 -2
  220. package/dist/server/server/src/services/index.mjs.map +1 -1
  221. package/dist/server/server/src/services/permission/engine.js +6 -0
  222. package/dist/server/server/src/services/permission/engine.js.map +1 -1
  223. package/dist/server/server/src/services/permission/engine.mjs +6 -0
  224. package/dist/server/server/src/services/permission/engine.mjs.map +1 -1
  225. package/dist/server/server/src/services/permission/queries.js +11 -2
  226. package/dist/server/server/src/services/permission/queries.js.map +1 -1
  227. package/dist/server/server/src/services/permission/queries.mjs +12 -3
  228. package/dist/server/server/src/services/permission/queries.mjs.map +1 -1
  229. package/dist/server/server/src/services/role.js +3 -0
  230. package/dist/server/server/src/services/role.js.map +1 -1
  231. package/dist/server/server/src/services/role.mjs +3 -0
  232. package/dist/server/server/src/services/role.mjs.map +1 -1
  233. package/dist/server/server/src/strategies/admin-token.js +110 -0
  234. package/dist/server/server/src/strategies/admin-token.js.map +1 -0
  235. package/dist/server/server/src/strategies/admin-token.mjs +104 -0
  236. package/dist/server/server/src/strategies/admin-token.mjs.map +1 -0
  237. package/dist/server/server/src/strategies/api-token-utils.js +56 -0
  238. package/dist/server/server/src/strategies/api-token-utils.js.map +1 -0
  239. package/dist/server/server/src/strategies/api-token-utils.mjs +52 -0
  240. package/dist/server/server/src/strategies/api-token-utils.mjs.map +1 -0
  241. package/dist/server/server/src/strategies/content-api-token.js +104 -0
  242. package/dist/server/server/src/strategies/content-api-token.js.map +1 -0
  243. package/dist/server/server/src/strategies/content-api-token.mjs +98 -0
  244. package/dist/server/server/src/strategies/content-api-token.mjs.map +1 -0
  245. package/dist/server/server/src/validation/admin-tokens.js +28 -0
  246. package/dist/server/server/src/validation/admin-tokens.js.map +1 -0
  247. package/dist/server/server/src/validation/admin-tokens.mjs +25 -0
  248. package/dist/server/server/src/validation/admin-tokens.mjs.map +1 -0
  249. package/dist/server/server/src/validation/api-tokens.js +5 -2
  250. package/dist/server/server/src/validation/api-tokens.js.map +1 -1
  251. package/dist/server/server/src/validation/api-tokens.mjs +5 -2
  252. package/dist/server/server/src/validation/api-tokens.mjs.map +1 -1
  253. package/dist/server/server/src/validation/project-settings.js +15 -16
  254. package/dist/server/server/src/validation/project-settings.js.map +1 -1
  255. package/dist/server/server/src/validation/project-settings.mjs +4 -5
  256. package/dist/server/server/src/validation/project-settings.mjs.map +1 -1
  257. package/dist/server/src/bootstrap.d.ts.map +1 -1
  258. package/dist/server/src/config/admin-actions.d.ts.map +1 -1
  259. package/dist/server/src/content-types/Permission.d.ts +9 -0
  260. package/dist/server/src/content-types/Permission.d.ts.map +1 -1
  261. package/dist/server/src/content-types/User.d.ts +8 -0
  262. package/dist/server/src/content-types/User.d.ts.map +1 -1
  263. package/dist/server/src/content-types/api-token.d.ts +23 -0
  264. package/dist/server/src/content-types/api-token.d.ts.map +1 -1
  265. package/dist/server/src/content-types/index.d.ts +40 -0
  266. package/dist/server/src/content-types/index.d.ts.map +1 -1
  267. package/dist/server/src/controllers/admin-token.d.ts +12 -0
  268. package/dist/server/src/controllers/admin-token.d.ts.map +1 -0
  269. package/dist/server/src/controllers/api-token.d.ts +0 -1
  270. package/dist/server/src/controllers/api-token.d.ts.map +1 -1
  271. package/dist/server/src/controllers/index.d.ts +9 -1
  272. package/dist/server/src/controllers/index.d.ts.map +1 -1
  273. package/dist/server/src/domain/permission/index.d.ts.map +1 -1
  274. package/dist/server/src/index.d.ts +56 -2
  275. package/dist/server/src/index.d.ts.map +1 -1
  276. package/dist/server/src/policies/index.d.ts +5 -0
  277. package/dist/server/src/policies/index.d.ts.map +1 -1
  278. package/dist/server/src/policies/isAdminTokensEnabled.d.ts +7 -0
  279. package/dist/server/src/policies/isAdminTokensEnabled.d.ts.map +1 -0
  280. package/dist/server/src/register.d.ts.map +1 -1
  281. package/dist/server/src/routes/admin-tokens.d.ts +15 -0
  282. package/dist/server/src/routes/admin-tokens.d.ts.map +1 -0
  283. package/dist/server/src/routes/index.d.ts.map +1 -1
  284. package/dist/server/src/services/api-token.d.ts +136 -12
  285. package/dist/server/src/services/api-token.d.ts.map +1 -1
  286. package/dist/server/src/services/constants.d.ts +13 -11
  287. package/dist/server/src/services/constants.d.ts.map +1 -1
  288. package/dist/server/src/services/index.d.ts +2 -2
  289. package/dist/server/src/services/index.d.ts.map +1 -1
  290. package/dist/server/src/services/permission/engine.d.ts +5 -0
  291. package/dist/server/src/services/permission/engine.d.ts.map +1 -1
  292. package/dist/server/src/services/permission/queries.d.ts.map +1 -1
  293. package/dist/server/src/services/permission.d.ts +1 -0
  294. package/dist/server/src/services/permission.d.ts.map +1 -1
  295. package/dist/server/src/services/role.d.ts.map +1 -1
  296. package/dist/server/src/strategies/admin-token.d.ts +51 -0
  297. package/dist/server/src/strategies/admin-token.d.ts.map +1 -0
  298. package/dist/server/src/strategies/api-token-utils.d.ts +13 -0
  299. package/dist/server/src/strategies/api-token-utils.d.ts.map +1 -0
  300. package/dist/server/src/strategies/{api-token.d.ts → content-api-token.d.ts} +10 -11
  301. package/dist/server/src/strategies/content-api-token.d.ts.map +1 -0
  302. package/dist/server/src/strategies/index.d.ts +2 -1
  303. package/dist/server/src/strategies/index.d.ts.map +1 -1
  304. package/dist/server/src/validation/admin-tokens.d.ts +75 -0
  305. package/dist/server/src/validation/admin-tokens.d.ts.map +1 -0
  306. package/dist/server/src/validation/api-tokens.d.ts +4 -2
  307. package/dist/server/src/validation/api-tokens.d.ts.map +1 -1
  308. package/dist/server/src/validation/project-settings.d.ts +10 -10
  309. package/dist/server/src/validation/project-settings.d.ts.map +1 -1
  310. package/dist/shared/contracts/admin-token.d.ts +122 -0
  311. package/dist/shared/contracts/admin-token.d.ts.map +1 -0
  312. package/dist/shared/contracts/api-token.d.ts +6 -95
  313. package/dist/shared/contracts/api-token.d.ts.map +1 -1
  314. package/dist/shared/contracts/content-api-token.d.ts +97 -0
  315. package/dist/shared/contracts/content-api-token.d.ts.map +1 -0
  316. package/dist/shared/contracts/shared.d.ts +1 -0
  317. package/dist/shared/contracts/shared.d.ts.map +1 -1
  318. package/package.json +7 -7
  319. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/FormApiTokenContainer.js.map +0 -1
  320. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/FormApiTokenContainer.mjs.map +0 -1
  321. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/constants.js +0 -37
  322. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/constants.js.map +0 -1
  323. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/constants.mjs +0 -16
  324. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/constants.mjs.map +0 -1
  325. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/getDateOfExpiration.js.map +0 -1
  326. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/getDateOfExpiration.mjs.map +0 -1
  327. package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/components/FormApiTokenContainer.d.ts +0 -20
  328. package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/constants.d.ts +0 -17
  329. package/dist/server/server/src/strategies/api-token.js +0 -144
  330. package/dist/server/server/src/strategies/api-token.js.map +0 -1
  331. package/dist/server/server/src/strategies/api-token.mjs +0 -138
  332. package/dist/server/server/src/strategies/api-token.mjs.map +0 -1
  333. package/dist/server/src/strategies/api-token.d.ts.map +0 -1
  334. /package/dist/admin/src/pages/Settings/{pages/ApiTokens/EditView → components/Tokens}/utils/getDateOfExpiration.d.ts +0 -0
@@ -10,12 +10,13 @@ import set from 'lodash/set';
10
10
  import { useIntl } from 'react-intl';
11
11
  import { isObject } from '../../../../../utils/objects.mjs';
12
12
  import { PermissionsDataManagerProvider } from '../hooks/usePermissionsDataManager.mjs';
13
+ import { createDynamicActionPermissionChecker, createFieldPermissionChecker } from '../utils/createPermissionChecker.mjs';
13
14
  import { difference } from '../utils/difference.mjs';
14
15
  import { createDefaultForm, createDefaultCTForm } from '../utils/forms.mjs';
15
16
  import { formatLayout } from '../utils/layouts.mjs';
16
17
  import { formatPermissionsForAPI } from '../utils/permissions.mjs';
17
18
  import { updateConditionsToFalse } from '../utils/updateConditionsToFalse.mjs';
18
- import { updateValues } from '../utils/updateValues.mjs';
19
+ import { updateValuesWithPermissions, updateValues } from '../utils/updateValues.mjs';
19
20
  import { ContentTypes } from './ContentTypes.mjs';
20
21
  import { PluginsAndSettingsPermissions } from './PluginsAndSettings.mjs';
21
22
 
@@ -41,7 +42,7 @@ const TAB_LABELS = [
41
42
  id: 'settings'
42
43
  }
43
44
  ];
44
- const Permissions = /*#__PURE__*/ React.forwardRef(({ layout, isFormDisabled, permissions = [] }, api)=>{
45
+ const Permissions = /*#__PURE__*/ React.forwardRef(({ layout, isFormDisabled, permissions = [], userPermissions }, api)=>{
45
46
  const [{ initialData, layouts, modifiedData }, dispatch] = React.useReducer(reducer, initialState, ()=>init(layout, permissions));
46
47
  const { formatMessage } = useIntl();
47
48
  React.useImperativeHandle(api, ()=>{
@@ -78,43 +79,58 @@ const Permissions = /*#__PURE__*/ React.forwardRef(({ layout, isFormDisabled, pe
78
79
  }
79
80
  };
80
81
  });
81
- const handleChangeCollectionTypeLeftActionRowCheckbox = (pathToCollectionType, propertyName, rowName, value)=>{
82
+ const handleChangeCollectionTypeLeftActionRowCheckbox = React.useCallback((pathToCollectionType, propertyName, rowName, value)=>{
82
83
  dispatch({
83
84
  type: 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX',
84
85
  pathToCollectionType,
85
86
  propertyName,
86
87
  rowName,
87
- value
88
+ value,
89
+ userPermissions
88
90
  });
89
- };
90
- const handleChangeCollectionTypeGlobalActionCheckbox = (collectionTypeKind, actionId, value)=>{
91
+ }, [
92
+ userPermissions
93
+ ]);
94
+ const handleChangeCollectionTypeGlobalActionCheckbox = React.useCallback((collectionTypeKind, actionId, value)=>{
91
95
  dispatch({
92
96
  type: 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX',
93
97
  collectionTypeKind,
94
98
  actionId,
95
- value
99
+ value,
100
+ userPermissions
96
101
  });
97
- };
98
- const handleChangeConditions = (conditions)=>{
102
+ }, [
103
+ userPermissions
104
+ ]);
105
+ const handleChangeConditions = React.useCallback((conditions)=>{
99
106
  dispatch({
100
107
  type: 'ON_CHANGE_CONDITIONS',
101
- conditions
108
+ conditions,
109
+ userPermissions
102
110
  });
103
- };
111
+ }, [
112
+ userPermissions
113
+ ]);
104
114
  const handleChangeSimpleCheckbox = React.useCallback(({ target: { name, value } })=>{
105
115
  dispatch({
106
116
  type: 'ON_CHANGE_SIMPLE_CHECKBOX',
107
117
  keys: name,
108
- value
118
+ value,
119
+ userPermissions
109
120
  });
110
- }, []);
121
+ }, [
122
+ userPermissions
123
+ ]);
111
124
  const handleChangeParentCheckbox = React.useCallback(({ target: { name, value } })=>{
112
125
  dispatch({
113
126
  type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX',
114
127
  keys: name,
115
- value
128
+ value,
129
+ userPermissions
116
130
  });
117
- }, []);
131
+ }, [
132
+ userPermissions
133
+ ]);
118
134
  return /*#__PURE__*/ jsx(PermissionsDataManagerProvider, {
119
135
  availableConditions: layout.conditions,
120
136
  modifiedData: modifiedData,
@@ -123,6 +139,7 @@ const Permissions = /*#__PURE__*/ React.forwardRef(({ layout, isFormDisabled, pe
123
139
  onChangeParentCheckbox: handleChangeParentCheckbox,
124
140
  onChangeCollectionTypeLeftActionRowCheckbox: handleChangeCollectionTypeLeftActionRowCheckbox,
125
141
  onChangeCollectionTypeGlobalActionCheckbox: handleChangeCollectionTypeGlobalActionCheckbox,
142
+ userPermissions: userPermissions,
126
143
  children: /*#__PURE__*/ jsxs(Tabs.Root, {
127
144
  defaultValue: TAB_LABELS[0].id,
128
145
  children: [
@@ -180,13 +197,42 @@ const initialState = {
180
197
  modifiedData: {},
181
198
  layouts: {}
182
199
  };
200
+ const buildInheritedConditionsFromExisting = (existing, enabledConditions = [])=>{
201
+ if (!isObject(existing)) {
202
+ return undefined;
203
+ }
204
+ const enabled = new Set(enabledConditions);
205
+ return Object.keys(existing).reduce((acc, key)=>{
206
+ acc[key] = enabled.has(key);
207
+ return acc;
208
+ }, {});
209
+ };
210
+ const inheritConditionsAtPath = (data, pathToActionObject, actionId, subject, userPermissions)=>{
211
+ if (userPermissions === undefined) {
212
+ return;
213
+ }
214
+ const matchingPermission = userPermissions.find((perm)=>perm.action === actionId && perm.subject === subject);
215
+ if (matchingPermission === undefined) {
216
+ return;
217
+ }
218
+ const obj = data;
219
+ const existingConditions = get(obj, [
220
+ ...pathToActionObject,
221
+ 'conditions'
222
+ ], undefined);
223
+ const nextConditions = buildInheritedConditionsFromExisting(existingConditions, matchingPermission.conditions ?? []);
224
+ if (nextConditions) {
225
+ set(obj, [
226
+ ...pathToActionObject,
227
+ 'conditions'
228
+ ], nextConditions);
229
+ }
230
+ };
183
231
  /* eslint-disable consistent-return */ const reducer = (state, action)=>produce(state, (draftState)=>{
184
232
  switch(action.type){
185
- // This action is called when a checkbox in the <GlobalActions />
186
- // changes
187
233
  case 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX':
188
234
  {
189
- const { collectionTypeKind, actionId, value } = action;
235
+ const { collectionTypeKind, actionId, value, userPermissions } = action;
190
236
  const pathToData = [
191
237
  'modifiedData',
192
238
  collectionTypeKind
@@ -198,10 +244,12 @@ const initialState = {
198
244
  actionId
199
245
  ], undefined);
200
246
  if (collectionTypeActionData) {
201
- let updatedValues = updateValues(collectionTypeActionData, value);
202
- // We need to remove the applied conditions
203
- // @ts-expect-error TODO: type better
204
- if (!value && updatedValues.conditions) {
247
+ const subjectPermissionChecker = createFieldPermissionChecker(actionId, collectionType, userPermissions);
248
+ let updatedValues = updateValuesWithPermissions(collectionTypeActionData, value, subjectPermissionChecker);
249
+ if (value === true) {
250
+ inheritConditionsAtPath(updatedValues, [], actionId, collectionType, userPermissions);
251
+ }
252
+ if (value === false && updatedValues.conditions !== undefined) {
205
253
  // @ts-expect-error – TODO: type better
206
254
  const updatedConditions = updateValues(updatedValues.conditions, false);
207
255
  updatedValues = {
@@ -220,14 +268,12 @@ const initialState = {
220
268
  }
221
269
  case 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX':
222
270
  {
223
- const { pathToCollectionType, propertyName, rowName, value } = action;
271
+ const { pathToCollectionType, propertyName, rowName, value, userPermissions } = action;
224
272
  let nextModifiedDataState = cloneDeep(state.modifiedData);
225
273
  const pathToModifiedDataCollectionType = pathToCollectionType.split('..');
226
274
  const objToUpdate = get(nextModifiedDataState, pathToModifiedDataCollectionType, {});
275
+ const subject = pathToModifiedDataCollectionType[pathToModifiedDataCollectionType.length - 1];
227
276
  Object.keys(objToUpdate).forEach((actionId)=>{
228
- // When a ct has multiple properties (ex: locales, field)
229
- // We need to make sure that we add any new property to the modifiedData
230
- // object.
231
277
  if (has(objToUpdate[actionId], `properties.${propertyName}`)) {
232
278
  const objValue = get(objToUpdate, [
233
279
  actionId,
@@ -243,15 +289,57 @@ const initialState = {
243
289
  rowName
244
290
  ];
245
291
  if (!isObject(objValue)) {
246
- set(nextModifiedDataState, pathToDataToSet, value);
292
+ if (userPermissions !== undefined && propertyName === 'fields') {
293
+ const hasPermission = userPermissions.some((perm)=>{
294
+ if (perm.action !== actionId || perm.subject !== subject) return false;
295
+ const fields = perm.properties?.fields;
296
+ if (fields === null || fields === undefined) return true;
297
+ if (Array.isArray(fields) && fields.length === 0) return false;
298
+ return Array.isArray(fields) && fields.some((f)=>rowName === f || rowName.startsWith(`${f}.`));
299
+ });
300
+ if (hasPermission === true) {
301
+ set(nextModifiedDataState, pathToDataToSet, value);
302
+ if (value === true) {
303
+ inheritConditionsAtPath(nextModifiedDataState, [
304
+ ...pathToModifiedDataCollectionType,
305
+ actionId
306
+ ], actionId, subject, userPermissions);
307
+ }
308
+ }
309
+ } else {
310
+ set(nextModifiedDataState, pathToDataToSet, value);
311
+ if (value === true && userPermissions !== undefined) {
312
+ inheritConditionsAtPath(nextModifiedDataState, [
313
+ ...pathToModifiedDataCollectionType,
314
+ actionId
315
+ ], actionId, subject, userPermissions);
316
+ }
317
+ }
247
318
  } else {
248
- const updatedValue = updateValues(objValue, value);
319
+ const permissionChecker = userPermissions !== undefined && propertyName === 'fields' ? (path)=>{
320
+ const fullFieldPath = [
321
+ rowName,
322
+ ...path
323
+ ].join('.');
324
+ const checker = createFieldPermissionChecker(actionId, subject, userPermissions);
325
+ return checker === undefined ? true : checker([
326
+ 'properties',
327
+ 'fields',
328
+ fullFieldPath
329
+ ]);
330
+ } : undefined;
331
+ const updatedValue = updateValuesWithPermissions(objValue, value, permissionChecker);
249
332
  set(nextModifiedDataState, pathToDataToSet, updatedValue);
333
+ if (value === true && userPermissions !== undefined) {
334
+ inheritConditionsAtPath(nextModifiedDataState, [
335
+ ...pathToModifiedDataCollectionType,
336
+ actionId
337
+ ], actionId, subject, userPermissions);
338
+ }
250
339
  }
251
340
  }
252
341
  });
253
- // When we uncheck a row, we need to check if we also need to disable the conditions
254
- if (!value) {
342
+ if (value === false) {
255
343
  // @ts-expect-error – TODO: type better
256
344
  nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);
257
345
  }
@@ -260,6 +348,10 @@ const initialState = {
260
348
  }
261
349
  case 'ON_CHANGE_CONDITIONS':
262
350
  {
351
+ // In App Token context, conditions are inherited from the user's permissions and must be read-only.
352
+ if (action.userPermissions !== undefined) {
353
+ break;
354
+ }
263
355
  Object.entries(action.conditions).forEach((array)=>{
264
356
  const [stringPathToData, conditionsToUpdate] = array;
265
357
  set(draftState, [
@@ -273,11 +365,30 @@ const initialState = {
273
365
  case 'ON_CHANGE_SIMPLE_CHECKBOX':
274
366
  {
275
367
  let nextModifiedDataState = cloneDeep(state.modifiedData);
368
+ const keysArray = action.keys.split('..');
276
369
  set(nextModifiedDataState, [
277
- ...action.keys.split('..')
370
+ ...keysArray
278
371
  ], action.value);
279
- // When we uncheck a single checkbox we need to remove the conditions from the parent
280
- if (!action.value) {
372
+ // In App Token context, when enabling a permission, inherit the user's conditions.
373
+ if (action.value === true && action.userPermissions !== undefined) {
374
+ const propertiesIndex = keysArray.indexOf('properties');
375
+ if (propertiesIndex > 0) {
376
+ const actionId = keysArray[propertiesIndex - 1];
377
+ const root = keysArray[0];
378
+ if ((root === 'collectionTypes' || root === 'singleTypes') && keysArray.length >= 3) {
379
+ const subject = keysArray[1];
380
+ inheritConditionsAtPath(nextModifiedDataState, [
381
+ root,
382
+ subject,
383
+ actionId
384
+ ], actionId, subject, action.userPermissions);
385
+ } else {
386
+ const pathToActionObject = keysArray.slice(0, propertiesIndex);
387
+ inheritConditionsAtPath(nextModifiedDataState, pathToActionObject, actionId, null, action.userPermissions);
388
+ }
389
+ }
390
+ }
391
+ if (action.value === false) {
281
392
  // @ts-expect-error – TODO: type better
282
393
  nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);
283
394
  }
@@ -318,16 +429,40 @@ const initialState = {
318
429
  *
319
430
  */ case 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX':
320
431
  {
321
- const { keys, value } = action;
432
+ const { keys, value, userPermissions } = action;
322
433
  const pathToValue = [
323
434
  ...keys.split('..')
324
435
  ];
325
436
  let nextModifiedDataState = cloneDeep(state.modifiedData);
326
437
  const oldValues = get(nextModifiedDataState, pathToValue, {});
327
- const updatedValues = updateValues(oldValues, value);
438
+ let actionId;
439
+ let subject;
440
+ if (pathToValue.length >= 2) {
441
+ subject = pathToValue[1];
442
+ }
443
+ if (pathToValue.length >= 3) {
444
+ actionId = pathToValue[2];
445
+ }
446
+ const permissionChecker = createDynamicActionPermissionChecker(subject, actionId, userPermissions);
447
+ const updatedValues = updateValuesWithPermissions(oldValues, value, permissionChecker);
448
+ // In App Token context, when enabling, inherit conditions from the user's permissions.
449
+ if (value === true && userPermissions !== undefined) {
450
+ const root = pathToValue[0];
451
+ const subjectForLookup = root === 'collectionTypes' || root === 'singleTypes' ? subject ?? null : null;
452
+ if (actionId !== undefined && subjectForLookup !== null) {
453
+ inheritConditionsAtPath(updatedValues, [], actionId, subjectForLookup, userPermissions);
454
+ } else if (isObject(updatedValues)) {
455
+ const updatedValuesObj = updatedValues;
456
+ Object.keys(updatedValuesObj).forEach((key)=>{
457
+ const maybeActionObj = updatedValuesObj[key];
458
+ if (isObject(maybeActionObj)) {
459
+ inheritConditionsAtPath(maybeActionObj, [], key, subjectForLookup, userPermissions);
460
+ }
461
+ });
462
+ }
463
+ }
328
464
  set(nextModifiedDataState, pathToValue, updatedValues);
329
- // When we uncheck a parent checkbox we need to remove the associated conditions
330
- if (!value) {
465
+ if (value === false) {
331
466
  // @ts-expect-error – TODO: type better
332
467
  nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);
333
468
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Permissions.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/components/Permissions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Tabs } from '@strapi/design-system';\nimport { produce } from 'immer';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport has from 'lodash/has';\nimport isEmpty from 'lodash/isEmpty';\nimport set from 'lodash/set';\nimport { useIntl } from 'react-intl';\n\nimport * as PermissonContracts from '../../../../../../../shared/contracts/permissions';\nimport { Permission } from '../../../../../../../shared/contracts/shared';\nimport { isObject } from '../../../../../utils/objects';\nimport {\n PermissionsDataManagerContextValue,\n PermissionsDataManagerProvider,\n} from '../hooks/usePermissionsDataManager';\nimport { difference } from '../utils/difference';\nimport { ConditionForm, Form, createDefaultCTForm, createDefaultForm } from '../utils/forms';\nimport { GenericLayout, formatLayout } from '../utils/layouts';\nimport { formatPermissionsForAPI } from '../utils/permissions';\nimport { updateConditionsToFalse } from '../utils/updateConditionsToFalse';\nimport { updateValues } from '../utils/updateValues';\n\nimport { ContentTypes } from './ContentTypes';\nimport { PluginsAndSettingsPermissions } from './PluginsAndSettings';\n\nconst TAB_LABELS = [\n {\n labelId: 'app.components.LeftMenuLinkContainer.collectionTypes',\n defaultMessage: 'Collection Types',\n id: 'collectionTypes',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.singleTypes',\n id: 'singleTypes',\n defaultMessage: 'Single Types',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.plugins',\n defaultMessage: 'Plugins',\n id: 'plugins',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.settings',\n defaultMessage: 'Settings',\n id: 'settings',\n },\n] as const;\n\n/* -------------------------------------------------------------------------------------------------\n * Permissions\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface PermissionsAPI {\n getPermissions: () => {\n didUpdateConditions: boolean;\n permissionsToSend: Omit<Permission, 'id' | 'createdAt' | 'updatedAt' | 'actionParameters'>[];\n };\n resetForm: () => void;\n setFormAfterSubmit: () => void;\n}\n\ninterface PermissionsProps {\n isFormDisabled?: boolean;\n permissions?: Permission[];\n layout: PermissonContracts.GetAll.Response['data'];\n}\n\nconst Permissions = React.forwardRef<PermissionsAPI, PermissionsProps>(\n ({ layout, isFormDisabled, permissions = [] }, api) => {\n const [{ initialData, layouts, modifiedData }, dispatch] = React.useReducer(\n reducer,\n initialState,\n () => init(layout, permissions)\n );\n const { formatMessage } = useIntl();\n\n React.useImperativeHandle(api, () => {\n return {\n getPermissions() {\n const collectionTypesDiff = difference(\n initialData.collectionTypes,\n modifiedData.collectionTypes\n );\n const singleTypesDiff = difference(initialData.singleTypes, modifiedData.singleTypes);\n\n const contentTypesDiff = { ...collectionTypesDiff, ...singleTypesDiff };\n\n let didUpdateConditions;\n\n if (isEmpty(contentTypesDiff)) {\n didUpdateConditions = false;\n } else {\n didUpdateConditions = Object.values(contentTypesDiff).some((permission = {}) => {\n return Object.values(permission).some((permissionValue) =>\n has(permissionValue, 'conditions')\n );\n });\n }\n\n return { permissionsToSend: formatPermissionsForAPI(modifiedData), didUpdateConditions };\n },\n resetForm() {\n dispatch({ type: 'RESET_FORM' });\n },\n setFormAfterSubmit() {\n dispatch({ type: 'SET_FORM_AFTER_SUBMIT' });\n },\n } satisfies PermissionsAPI;\n });\n\n const handleChangeCollectionTypeLeftActionRowCheckbox = (\n pathToCollectionType: OnChangeCollectionTypeRowLeftCheckboxAction['pathToCollectionType'],\n propertyName: OnChangeCollectionTypeRowLeftCheckboxAction['propertyName'],\n rowName: OnChangeCollectionTypeRowLeftCheckboxAction['rowName'],\n value: OnChangeCollectionTypeRowLeftCheckboxAction['value']\n ) => {\n dispatch({\n type: 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX',\n pathToCollectionType,\n propertyName,\n rowName,\n value,\n });\n };\n\n const handleChangeCollectionTypeGlobalActionCheckbox = (\n collectionTypeKind: OnChangeCollectionTypeGlobalActionCheckboxAction['collectionTypeKind'],\n actionId: OnChangeCollectionTypeGlobalActionCheckboxAction['actionId'],\n value: OnChangeCollectionTypeGlobalActionCheckboxAction['value']\n ) => {\n dispatch({\n type: 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX',\n collectionTypeKind,\n actionId,\n value,\n });\n };\n\n const handleChangeConditions = (conditions: OnChangeConditionsAction['conditions']) => {\n dispatch({ type: 'ON_CHANGE_CONDITIONS', conditions });\n };\n\n const handleChangeSimpleCheckbox: PermissionsDataManagerContextValue['onChangeSimpleCheckbox'] =\n React.useCallback(({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_SIMPLE_CHECKBOX',\n keys: name,\n value,\n });\n }, []);\n\n const handleChangeParentCheckbox: PermissionsDataManagerContextValue['onChangeParentCheckbox'] =\n React.useCallback(({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX',\n keys: name,\n value,\n });\n }, []);\n\n return (\n <PermissionsDataManagerProvider\n availableConditions={layout.conditions}\n modifiedData={modifiedData}\n onChangeConditions={handleChangeConditions}\n onChangeSimpleCheckbox={handleChangeSimpleCheckbox}\n onChangeParentCheckbox={handleChangeParentCheckbox}\n onChangeCollectionTypeLeftActionRowCheckbox={\n handleChangeCollectionTypeLeftActionRowCheckbox\n }\n onChangeCollectionTypeGlobalActionCheckbox={handleChangeCollectionTypeGlobalActionCheckbox}\n >\n <Tabs.Root defaultValue={TAB_LABELS[0].id}>\n <Tabs.List\n aria-label={formatMessage({\n id: 'Settings.permissions.users.tabs.label',\n defaultMessage: 'Tabs Permissions',\n })}\n >\n {TAB_LABELS.map((tabLabel) => (\n <Tabs.Trigger key={tabLabel.id} value={tabLabel.id}>\n {formatMessage({ id: tabLabel.labelId, defaultMessage: tabLabel.defaultMessage })}\n </Tabs.Trigger>\n ))}\n </Tabs.List>\n <Tabs.Content value={TAB_LABELS[0].id}>\n <ContentTypes\n layout={layouts.collectionTypes}\n kind=\"collectionTypes\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[1].id}>\n <ContentTypes\n layout={layouts.singleTypes}\n kind=\"singleTypes\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[2].id}>\n <PluginsAndSettingsPermissions\n layout={layouts.plugins}\n kind=\"plugins\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[3].id}>\n <PluginsAndSettingsPermissions\n layout={layouts.settings}\n kind=\"settings\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n </Tabs.Root>\n </PermissionsDataManagerProvider>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * reducer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PermissionForms {\n collectionTypes: Form;\n plugins: Record<string, Form>;\n settings: Record<string, Form>;\n singleTypes: Form;\n}\n\ninterface State {\n initialData: PermissionForms;\n modifiedData: PermissionForms;\n layouts: {\n collectionTypes: PermissonContracts.ContentPermission;\n singleTypes: PermissonContracts.ContentPermission;\n plugins: GenericLayout<PermissonContracts.PluginPermission>[];\n settings: GenericLayout<PermissonContracts.SettingPermission>[];\n };\n}\n\nconst initialState = {\n initialData: {},\n modifiedData: {},\n layouts: {},\n};\n\ninterface OnChangeCollectionTypeGlobalActionCheckboxAction {\n type: 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX';\n collectionTypeKind: keyof PermissionForms;\n actionId: string;\n value: boolean;\n}\n\ninterface OnChangeCollectionTypeRowLeftCheckboxAction {\n type: 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX';\n pathToCollectionType: string;\n propertyName: string;\n rowName: string;\n value: boolean;\n}\n\ninterface OnChangeConditionsAction {\n type: 'ON_CHANGE_CONDITIONS';\n conditions: Record<string, ConditionForm>;\n}\n\ninterface OnChangeSimpleCheckboxAction {\n type: 'ON_CHANGE_SIMPLE_CHECKBOX';\n keys: string;\n value: boolean;\n}\n\ninterface OnChangeToggleParentCheckbox {\n type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX';\n keys: string;\n value: boolean;\n}\n\ninterface ResetFormAction {\n type: 'RESET_FORM';\n}\n\ninterface SetFormAfterSubmitAction {\n type: 'SET_FORM_AFTER_SUBMIT';\n}\n\ntype Action =\n | OnChangeCollectionTypeGlobalActionCheckboxAction\n | OnChangeCollectionTypeRowLeftCheckboxAction\n | OnChangeConditionsAction\n | OnChangeSimpleCheckboxAction\n | OnChangeToggleParentCheckbox\n | ResetFormAction\n | SetFormAfterSubmitAction;\n\n/* eslint-disable consistent-return */\nconst reducer = (state: State, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n // This action is called when a checkbox in the <GlobalActions />\n // changes\n case 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX': {\n const { collectionTypeKind, actionId, value } = action;\n const pathToData = ['modifiedData', collectionTypeKind];\n\n Object.keys(get(state, pathToData)).forEach((collectionType) => {\n const collectionTypeActionData = get(\n state,\n [...pathToData, collectionType, actionId],\n undefined\n );\n\n if (collectionTypeActionData) {\n let updatedValues = updateValues(collectionTypeActionData, value);\n\n // We need to remove the applied conditions\n // @ts-expect-error – TODO: type better\n if (!value && updatedValues.conditions) {\n // @ts-expect-error – TODO: type better\n const updatedConditions = updateValues(updatedValues.conditions, false);\n\n updatedValues = { ...updatedValues, conditions: updatedConditions };\n }\n\n set(draftState, [...pathToData, collectionType, actionId], updatedValues);\n }\n });\n\n break;\n }\n case 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX': {\n const { pathToCollectionType, propertyName, rowName, value } = action;\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n const pathToModifiedDataCollectionType = pathToCollectionType.split('..');\n\n const objToUpdate = get(nextModifiedDataState, pathToModifiedDataCollectionType, {});\n\n Object.keys(objToUpdate).forEach((actionId) => {\n // When a ct has multiple properties (ex: locales, field)\n // We need to make sure that we add any new property to the modifiedData\n // object.\n if (has(objToUpdate[actionId], `properties.${propertyName}`)) {\n const objValue = get(objToUpdate, [actionId, 'properties', propertyName, rowName]);\n const pathToDataToSet = [\n ...pathToModifiedDataCollectionType,\n actionId,\n 'properties',\n propertyName,\n rowName,\n ];\n\n if (!isObject(objValue)) {\n set(nextModifiedDataState, pathToDataToSet, value);\n } else {\n const updatedValue = updateValues(objValue, value);\n\n set(nextModifiedDataState, pathToDataToSet, updatedValue);\n }\n }\n });\n\n // When we uncheck a row, we need to check if we also need to disable the conditions\n if (!value) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, 'modifiedData', nextModifiedDataState);\n\n break;\n }\n case 'ON_CHANGE_CONDITIONS': {\n Object.entries(action.conditions).forEach((array) => {\n const [stringPathToData, conditionsToUpdate] = array;\n\n set(\n draftState,\n ['modifiedData', ...stringPathToData.split('..'), 'conditions'],\n conditionsToUpdate\n );\n });\n\n break;\n }\n case 'ON_CHANGE_SIMPLE_CHECKBOX': {\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n\n set(nextModifiedDataState, [...action.keys.split('..')], action.value);\n\n // When we uncheck a single checkbox we need to remove the conditions from the parent\n if (!action.value) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, 'modifiedData', nextModifiedDataState);\n\n break;\n }\n /*\n * Here the idea is to retrieve a specific value of the modifiedObject\n * then update all the boolean values of the retrieved one\n * and update the drafState.\n *\n * For instance in order to enable create action for all the fields and locales\n * of the restaurant content type we need to :\n * 1. Retrieve the modifiedData.collectionTypes.restaurant.create object\n * 2. Toggle all the end boolean values to the desired one\n * 3. Update the draftState\n *\n * Since the case works well in order to update what we called \"parent\" checkbox. We can\n * reuse the action when we need to toggle change all the values that depends on this one.\n * A parent checkbox is a checkbox which value is not a boolean but depends on its children ones, therefore,\n * a parent checkbox does not have a represented value in the draftState, they are just helpers.\n *\n * Given the following data:\n *\n * const data = {\n * restaurant: {\n * create: {\n * fields: { name: true },\n * locales: { en: false }\n * }\n * }\n * }\n *\n * The value of the create checkbox for the restaurant will be ƒalse since not all its children have\n * truthy values and in order to set its value to true when need to have all the values of its children set to true.\n *\n * Similarly, we can reuse the logic for the components attributes\n *\n */\n case 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX': {\n const { keys, value } = action;\n const pathToValue = [...keys.split('..')];\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n const oldValues = get(nextModifiedDataState, pathToValue, {});\n\n const updatedValues = updateValues(oldValues, value);\n set(nextModifiedDataState, pathToValue, updatedValues);\n\n // When we uncheck a parent checkbox we need to remove the associated conditions\n if (!value) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, ['modifiedData'], nextModifiedDataState);\n\n break;\n }\n case 'RESET_FORM': {\n draftState.modifiedData = state.initialData;\n break;\n }\n case 'SET_FORM_AFTER_SUBMIT': {\n draftState.initialData = state.modifiedData;\n break;\n }\n default:\n return draftState;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * init (reducer)\n * -----------------------------------------------------------------------------------------------*/\n\nconst init = (\n layout: PermissionsProps['layout'],\n permissions: PermissionsProps['permissions']\n): State => {\n const {\n conditions,\n sections: { collectionTypes, singleTypes, plugins, settings },\n } = layout;\n\n const layouts = {\n collectionTypes,\n singleTypes,\n plugins: formatLayout(plugins, 'plugin'),\n settings: formatLayout(settings, 'category'),\n };\n\n const defaultForm = {\n collectionTypes: createDefaultCTForm(collectionTypes, conditions, permissions),\n singleTypes: createDefaultCTForm(singleTypes, conditions, permissions),\n plugins: createDefaultForm(layouts.plugins, conditions, permissions),\n settings: createDefaultForm(layouts.settings, conditions, permissions),\n };\n\n return {\n initialData: defaultForm,\n modifiedData: defaultForm,\n layouts,\n };\n};\n\nexport { Permissions };\nexport type {\n State,\n OnChangeCollectionTypeRowLeftCheckboxAction,\n OnChangeConditionsAction,\n OnChangeCollectionTypeGlobalActionCheckboxAction,\n};\n"],"names":["TAB_LABELS","labelId","defaultMessage","id","Permissions","React","forwardRef","layout","isFormDisabled","permissions","api","initialData","layouts","modifiedData","dispatch","useReducer","reducer","initialState","init","formatMessage","useIntl","useImperativeHandle","getPermissions","collectionTypesDiff","difference","collectionTypes","singleTypesDiff","singleTypes","contentTypesDiff","didUpdateConditions","isEmpty","Object","values","some","permission","permissionValue","has","permissionsToSend","formatPermissionsForAPI","resetForm","type","setFormAfterSubmit","handleChangeCollectionTypeLeftActionRowCheckbox","pathToCollectionType","propertyName","rowName","value","handleChangeCollectionTypeGlobalActionCheckbox","collectionTypeKind","actionId","handleChangeConditions","conditions","handleChangeSimpleCheckbox","useCallback","target","name","keys","handleChangeParentCheckbox","_jsx","PermissionsDataManagerProvider","availableConditions","onChangeConditions","onChangeSimpleCheckbox","onChangeParentCheckbox","onChangeCollectionTypeLeftActionRowCheckbox","onChangeCollectionTypeGlobalActionCheckbox","_jsxs","Tabs","Root","defaultValue","List","aria-label","map","tabLabel","Trigger","Content","ContentTypes","kind","PluginsAndSettingsPermissions","plugins","settings","state","action","produce","draftState","pathToData","get","forEach","collectionType","collectionTypeActionData","undefined","updatedValues","updateValues","updatedConditions","set","nextModifiedDataState","cloneDeep","pathToModifiedDataCollectionType","split","objToUpdate","objValue","pathToDataToSet","isObject","updatedValue","updateConditionsToFalse","entries","array","stringPathToData","conditionsToUpdate","pathToValue","oldValues","sections","formatLayout","defaultForm","createDefaultCTForm","createDefaultForm"],"mappings":"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"}
1
+ {"version":3,"file":"Permissions.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/components/Permissions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Tabs } from '@strapi/design-system';\nimport { produce } from 'immer';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport has from 'lodash/has';\nimport isEmpty from 'lodash/isEmpty';\nimport set from 'lodash/set';\nimport { useIntl } from 'react-intl';\n\nimport * as PermissonContracts from '../../../../../../../shared/contracts/permissions';\nimport { Permission } from '../../../../../../../shared/contracts/shared';\nimport { Permission as AuthPermission } from '../../../../../features/Auth';\nimport { isObject } from '../../../../../utils/objects';\nimport {\n PermissionsDataManagerContextValue,\n PermissionsDataManagerProvider,\n} from '../hooks/usePermissionsDataManager';\nimport {\n createFieldPermissionChecker,\n createDynamicActionPermissionChecker,\n} from '../utils/createPermissionChecker';\nimport { difference } from '../utils/difference';\nimport { ConditionForm, Form, createDefaultCTForm, createDefaultForm } from '../utils/forms';\nimport { GenericLayout, formatLayout } from '../utils/layouts';\nimport { formatPermissionsForAPI } from '../utils/permissions';\nimport { updateConditionsToFalse } from '../utils/updateConditionsToFalse';\nimport { updateValues, updateValuesWithPermissions } from '../utils/updateValues';\n\nimport { ContentTypes } from './ContentTypes';\nimport { PluginsAndSettingsPermissions } from './PluginsAndSettings';\n\nconst TAB_LABELS = [\n {\n labelId: 'app.components.LeftMenuLinkContainer.collectionTypes',\n defaultMessage: 'Collection Types',\n id: 'collectionTypes',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.singleTypes',\n id: 'singleTypes',\n defaultMessage: 'Single Types',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.plugins',\n defaultMessage: 'Plugins',\n id: 'plugins',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.settings',\n defaultMessage: 'Settings',\n id: 'settings',\n },\n] as const;\n\n/* -------------------------------------------------------------------------------------------------\n * Permissions\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface PermissionsAPI {\n getPermissions: () => {\n didUpdateConditions: boolean;\n permissionsToSend: Omit<Permission, 'id' | 'createdAt' | 'updatedAt' | 'actionParameters'>[];\n };\n resetForm: () => void;\n setFormAfterSubmit: () => void;\n}\n\ninterface PermissionsProps {\n isFormDisabled?: boolean;\n permissions?: Permission[];\n layout: PermissonContracts.GetAll.Response['data'];\n userPermissions?: AuthPermission[];\n}\n\nconst Permissions = React.forwardRef<PermissionsAPI, PermissionsProps>(\n ({ layout, isFormDisabled, permissions = [], userPermissions }, api) => {\n const [{ initialData, layouts, modifiedData }, dispatch] = React.useReducer(\n reducer,\n initialState,\n () => init(layout, permissions)\n );\n const { formatMessage } = useIntl();\n\n React.useImperativeHandle(api, () => {\n return {\n getPermissions() {\n const collectionTypesDiff = difference(\n initialData.collectionTypes,\n modifiedData.collectionTypes\n );\n const singleTypesDiff = difference(initialData.singleTypes, modifiedData.singleTypes);\n\n const contentTypesDiff = { ...collectionTypesDiff, ...singleTypesDiff };\n\n let didUpdateConditions;\n\n if (isEmpty(contentTypesDiff)) {\n didUpdateConditions = false;\n } else {\n didUpdateConditions = Object.values(contentTypesDiff).some((permission = {}) => {\n return Object.values(permission).some((permissionValue) =>\n has(permissionValue, 'conditions')\n );\n });\n }\n\n return { permissionsToSend: formatPermissionsForAPI(modifiedData), didUpdateConditions };\n },\n resetForm() {\n dispatch({ type: 'RESET_FORM' });\n },\n setFormAfterSubmit() {\n dispatch({ type: 'SET_FORM_AFTER_SUBMIT' });\n },\n } satisfies PermissionsAPI;\n });\n\n const handleChangeCollectionTypeLeftActionRowCheckbox = React.useCallback(\n (\n pathToCollectionType: OnChangeCollectionTypeRowLeftCheckboxAction['pathToCollectionType'],\n propertyName: OnChangeCollectionTypeRowLeftCheckboxAction['propertyName'],\n rowName: OnChangeCollectionTypeRowLeftCheckboxAction['rowName'],\n value: OnChangeCollectionTypeRowLeftCheckboxAction['value']\n ) => {\n dispatch({\n type: 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX',\n pathToCollectionType,\n propertyName,\n rowName,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n const handleChangeCollectionTypeGlobalActionCheckbox = React.useCallback(\n (\n collectionTypeKind: OnChangeCollectionTypeGlobalActionCheckboxAction['collectionTypeKind'],\n actionId: OnChangeCollectionTypeGlobalActionCheckboxAction['actionId'],\n value: OnChangeCollectionTypeGlobalActionCheckboxAction['value']\n ) => {\n dispatch({\n type: 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX',\n collectionTypeKind,\n actionId,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n const handleChangeConditions = React.useCallback(\n (conditions: OnChangeConditionsAction['conditions']) => {\n dispatch({ type: 'ON_CHANGE_CONDITIONS', conditions, userPermissions });\n },\n [userPermissions]\n );\n\n const handleChangeSimpleCheckbox: PermissionsDataManagerContextValue['onChangeSimpleCheckbox'] =\n React.useCallback(\n ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_SIMPLE_CHECKBOX',\n keys: name,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n const handleChangeParentCheckbox: PermissionsDataManagerContextValue['onChangeParentCheckbox'] =\n React.useCallback(\n ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX',\n keys: name,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n return (\n <PermissionsDataManagerProvider\n availableConditions={layout.conditions}\n modifiedData={modifiedData}\n onChangeConditions={handleChangeConditions}\n onChangeSimpleCheckbox={handleChangeSimpleCheckbox}\n onChangeParentCheckbox={handleChangeParentCheckbox}\n onChangeCollectionTypeLeftActionRowCheckbox={\n handleChangeCollectionTypeLeftActionRowCheckbox\n }\n onChangeCollectionTypeGlobalActionCheckbox={handleChangeCollectionTypeGlobalActionCheckbox}\n userPermissions={userPermissions}\n >\n <Tabs.Root defaultValue={TAB_LABELS[0].id}>\n <Tabs.List\n aria-label={formatMessage({\n id: 'Settings.permissions.users.tabs.label',\n defaultMessage: 'Tabs Permissions',\n })}\n >\n {TAB_LABELS.map((tabLabel) => (\n <Tabs.Trigger key={tabLabel.id} value={tabLabel.id}>\n {formatMessage({ id: tabLabel.labelId, defaultMessage: tabLabel.defaultMessage })}\n </Tabs.Trigger>\n ))}\n </Tabs.List>\n <Tabs.Content value={TAB_LABELS[0].id}>\n <ContentTypes\n layout={layouts.collectionTypes}\n kind=\"collectionTypes\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[1].id}>\n <ContentTypes\n layout={layouts.singleTypes}\n kind=\"singleTypes\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[2].id}>\n <PluginsAndSettingsPermissions\n layout={layouts.plugins}\n kind=\"plugins\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[3].id}>\n <PluginsAndSettingsPermissions\n layout={layouts.settings}\n kind=\"settings\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n </Tabs.Root>\n </PermissionsDataManagerProvider>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * reducer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PermissionForms {\n collectionTypes: Form;\n plugins: Record<string, Form>;\n settings: Record<string, Form>;\n singleTypes: Form;\n}\n\ninterface State {\n initialData: PermissionForms;\n modifiedData: PermissionForms;\n layouts: {\n collectionTypes: PermissonContracts.ContentPermission;\n singleTypes: PermissonContracts.ContentPermission;\n plugins: GenericLayout<PermissonContracts.PluginPermission>[];\n settings: GenericLayout<PermissonContracts.SettingPermission>[];\n };\n}\n\nconst initialState = {\n initialData: {},\n modifiedData: {},\n layouts: {},\n};\n\ninterface OnChangeCollectionTypeGlobalActionCheckboxAction {\n type: 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX';\n collectionTypeKind: keyof PermissionForms;\n actionId: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeCollectionTypeRowLeftCheckboxAction {\n type: 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX';\n pathToCollectionType: string;\n propertyName: string;\n rowName: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeConditionsAction {\n type: 'ON_CHANGE_CONDITIONS';\n conditions: Record<string, ConditionForm>;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeSimpleCheckboxAction {\n type: 'ON_CHANGE_SIMPLE_CHECKBOX';\n keys: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeToggleParentCheckbox {\n type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX';\n keys: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface ResetFormAction {\n type: 'RESET_FORM';\n}\n\ninterface SetFormAfterSubmitAction {\n type: 'SET_FORM_AFTER_SUBMIT';\n}\n\ntype Action =\n | OnChangeCollectionTypeGlobalActionCheckboxAction\n | OnChangeCollectionTypeRowLeftCheckboxAction\n | OnChangeConditionsAction\n | OnChangeSimpleCheckboxAction\n | OnChangeToggleParentCheckbox\n | ResetFormAction\n | SetFormAfterSubmitAction;\n\nconst buildInheritedConditionsFromExisting = (\n existing: unknown,\n enabledConditions: string[] = []\n): Record<string, boolean> | undefined => {\n if (!isObject(existing)) {\n return undefined;\n }\n\n const enabled = new Set(enabledConditions);\n\n return Object.keys(existing).reduce<Record<string, boolean>>((acc, key) => {\n acc[key] = enabled.has(key);\n\n return acc;\n }, {});\n};\n\nconst inheritConditionsAtPath = (\n data: unknown,\n pathToActionObject: string[],\n actionId: string,\n subject: string | null,\n userPermissions: AuthPermission[] | undefined\n) => {\n if (userPermissions === undefined) {\n return;\n }\n\n const matchingPermission = userPermissions.find(\n (perm) => perm.action === actionId && perm.subject === subject\n );\n\n if (matchingPermission === undefined) {\n return;\n }\n\n const obj = data as Record<string, unknown>;\n const existingConditions = get(obj, [...pathToActionObject, 'conditions'], undefined);\n const nextConditions = buildInheritedConditionsFromExisting(\n existingConditions,\n matchingPermission.conditions ?? []\n );\n\n if (nextConditions) {\n set(obj, [...pathToActionObject, 'conditions'], nextConditions);\n }\n};\n\n/* eslint-disable consistent-return */\nconst reducer = (state: State, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX': {\n const { collectionTypeKind, actionId, value, userPermissions } = action;\n const pathToData = ['modifiedData', collectionTypeKind];\n\n Object.keys(get(state, pathToData)).forEach((collectionType) => {\n const collectionTypeActionData = get(\n state,\n [...pathToData, collectionType, actionId],\n undefined\n );\n\n if (collectionTypeActionData) {\n const subjectPermissionChecker = createFieldPermissionChecker(\n actionId,\n collectionType,\n userPermissions\n );\n\n let updatedValues = updateValuesWithPermissions(\n collectionTypeActionData,\n value,\n subjectPermissionChecker\n );\n\n if (value === true) {\n inheritConditionsAtPath(updatedValues, [], actionId, collectionType, userPermissions);\n }\n\n if (value === false && updatedValues.conditions !== undefined) {\n // @ts-expect-error – TODO: type better\n const updatedConditions = updateValues(updatedValues.conditions, false);\n\n updatedValues = { ...updatedValues, conditions: updatedConditions };\n }\n\n set(draftState, [...pathToData, collectionType, actionId], updatedValues);\n }\n });\n\n break;\n }\n case 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX': {\n const { pathToCollectionType, propertyName, rowName, value, userPermissions } = action;\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n const pathToModifiedDataCollectionType = pathToCollectionType.split('..');\n\n const objToUpdate = get(nextModifiedDataState, pathToModifiedDataCollectionType, {});\n\n const subject =\n pathToModifiedDataCollectionType[pathToModifiedDataCollectionType.length - 1];\n\n Object.keys(objToUpdate).forEach((actionId) => {\n if (has(objToUpdate[actionId], `properties.${propertyName}`)) {\n const objValue = get(objToUpdate, [actionId, 'properties', propertyName, rowName]);\n const pathToDataToSet = [\n ...pathToModifiedDataCollectionType,\n actionId,\n 'properties',\n propertyName,\n rowName,\n ];\n\n if (!isObject(objValue)) {\n if (userPermissions !== undefined && propertyName === 'fields') {\n const hasPermission = userPermissions.some((perm) => {\n if (perm.action !== actionId || perm.subject !== subject) return false;\n\n const fields = perm.properties?.fields;\n if (fields === null || fields === undefined) return true;\n if (Array.isArray(fields) && fields.length === 0) return false;\n\n return (\n Array.isArray(fields) &&\n fields.some((f) => rowName === f || rowName.startsWith(`${f}.`))\n );\n });\n\n if (hasPermission === true) {\n set(nextModifiedDataState, pathToDataToSet, value);\n if (value === true) {\n inheritConditionsAtPath(\n nextModifiedDataState,\n [...pathToModifiedDataCollectionType, actionId],\n actionId,\n subject,\n userPermissions\n );\n }\n }\n } else {\n set(nextModifiedDataState, pathToDataToSet, value);\n if (value === true && userPermissions !== undefined) {\n inheritConditionsAtPath(\n nextModifiedDataState,\n [...pathToModifiedDataCollectionType, actionId],\n actionId,\n subject,\n userPermissions\n );\n }\n }\n } else {\n const permissionChecker =\n userPermissions !== undefined && propertyName === 'fields'\n ? (path: string[]) => {\n const fullFieldPath = [rowName, ...path].join('.');\n const checker = createFieldPermissionChecker(\n actionId,\n subject,\n userPermissions\n );\n return checker === undefined\n ? true\n : checker(['properties', 'fields', fullFieldPath]);\n }\n : undefined;\n\n const updatedValue = updateValuesWithPermissions(objValue, value, permissionChecker);\n\n set(nextModifiedDataState, pathToDataToSet, updatedValue);\n if (value === true && userPermissions !== undefined) {\n inheritConditionsAtPath(\n nextModifiedDataState,\n [...pathToModifiedDataCollectionType, actionId],\n actionId,\n subject,\n userPermissions\n );\n }\n }\n }\n });\n\n if (value === false) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, 'modifiedData', nextModifiedDataState);\n\n break;\n }\n case 'ON_CHANGE_CONDITIONS': {\n // In App Token context, conditions are inherited from the user's permissions and must be read-only.\n if (action.userPermissions !== undefined) {\n break;\n }\n\n Object.entries(action.conditions).forEach((array) => {\n const [stringPathToData, conditionsToUpdate] = array;\n\n set(\n draftState,\n ['modifiedData', ...stringPathToData.split('..'), 'conditions'],\n conditionsToUpdate\n );\n });\n\n break;\n }\n case 'ON_CHANGE_SIMPLE_CHECKBOX': {\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n\n const keysArray = action.keys.split('..');\n set(nextModifiedDataState, [...keysArray], action.value);\n\n // In App Token context, when enabling a permission, inherit the user's conditions.\n if (action.value === true && action.userPermissions !== undefined) {\n const propertiesIndex = keysArray.indexOf('properties');\n\n if (propertiesIndex > 0) {\n const actionId = keysArray[propertiesIndex - 1];\n const root = keysArray[0];\n\n if ((root === 'collectionTypes' || root === 'singleTypes') && keysArray.length >= 3) {\n const subject = keysArray[1];\n inheritConditionsAtPath(\n nextModifiedDataState,\n [root, subject, actionId],\n actionId,\n subject,\n action.userPermissions\n );\n } else {\n const pathToActionObject = keysArray.slice(0, propertiesIndex);\n inheritConditionsAtPath(\n nextModifiedDataState,\n pathToActionObject,\n actionId,\n null,\n action.userPermissions\n );\n }\n }\n }\n\n if (action.value === false) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, 'modifiedData', nextModifiedDataState);\n\n break;\n }\n /*\n * Here the idea is to retrieve a specific value of the modifiedObject\n * then update all the boolean values of the retrieved one\n * and update the drafState.\n *\n * For instance in order to enable create action for all the fields and locales\n * of the restaurant content type we need to :\n * 1. Retrieve the modifiedData.collectionTypes.restaurant.create object\n * 2. Toggle all the end boolean values to the desired one\n * 3. Update the draftState\n *\n * Since the case works well in order to update what we called \"parent\" checkbox. We can\n * reuse the action when we need to toggle change all the values that depends on this one.\n * A parent checkbox is a checkbox which value is not a boolean but depends on its children ones, therefore,\n * a parent checkbox does not have a represented value in the draftState, they are just helpers.\n *\n * Given the following data:\n *\n * const data = {\n * restaurant: {\n * create: {\n * fields: { name: true },\n * locales: { en: false }\n * }\n * }\n * }\n *\n * The value of the create checkbox for the restaurant will be ƒalse since not all its children have\n * truthy values and in order to set its value to true when need to have all the values of its children set to true.\n *\n * Similarly, we can reuse the logic for the components attributes\n *\n */\n case 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX': {\n const { keys, value, userPermissions } = action;\n const pathToValue = [...keys.split('..')];\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n const oldValues = get(nextModifiedDataState, pathToValue, {});\n\n let actionId: string | undefined;\n let subject: string | undefined;\n\n if (pathToValue.length >= 2) {\n subject = pathToValue[1];\n }\n\n if (pathToValue.length >= 3) {\n actionId = pathToValue[2];\n }\n\n const permissionChecker = createDynamicActionPermissionChecker(\n subject,\n actionId,\n userPermissions\n );\n\n const updatedValues = updateValuesWithPermissions(oldValues, value, permissionChecker);\n\n // In App Token context, when enabling, inherit conditions from the user's permissions.\n if (value === true && userPermissions !== undefined) {\n const root = pathToValue[0];\n const subjectForLookup =\n root === 'collectionTypes' || root === 'singleTypes' ? (subject ?? null) : null;\n\n if (actionId !== undefined && subjectForLookup !== null) {\n inheritConditionsAtPath(updatedValues, [], actionId, subjectForLookup, userPermissions);\n } else if (isObject(updatedValues)) {\n const updatedValuesObj = updatedValues as Record<string, unknown>;\n\n Object.keys(updatedValuesObj).forEach((key) => {\n const maybeActionObj = updatedValuesObj[key];\n if (isObject(maybeActionObj)) {\n inheritConditionsAtPath(maybeActionObj, [], key, subjectForLookup, userPermissions);\n }\n });\n }\n }\n\n set(nextModifiedDataState, pathToValue, updatedValues);\n\n if (value === false) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, ['modifiedData'], nextModifiedDataState);\n\n break;\n }\n case 'RESET_FORM': {\n draftState.modifiedData = state.initialData;\n break;\n }\n case 'SET_FORM_AFTER_SUBMIT': {\n draftState.initialData = state.modifiedData;\n break;\n }\n default:\n return draftState;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * init (reducer)\n * -----------------------------------------------------------------------------------------------*/\n\nconst init = (\n layout: PermissionsProps['layout'],\n permissions: PermissionsProps['permissions']\n): State => {\n const {\n conditions,\n sections: { collectionTypes, singleTypes, plugins, settings },\n } = layout;\n\n const layouts = {\n collectionTypes,\n singleTypes,\n plugins: formatLayout(plugins, 'plugin'),\n settings: formatLayout(settings, 'category'),\n };\n\n const defaultForm = {\n collectionTypes: createDefaultCTForm(collectionTypes, conditions, permissions),\n singleTypes: createDefaultCTForm(singleTypes, conditions, permissions),\n plugins: createDefaultForm(layouts.plugins, conditions, permissions),\n settings: createDefaultForm(layouts.settings, conditions, permissions),\n };\n\n return {\n initialData: defaultForm,\n modifiedData: defaultForm,\n layouts,\n };\n};\n\nexport { Permissions };\nexport type {\n State,\n OnChangeCollectionTypeRowLeftCheckboxAction,\n OnChangeConditionsAction,\n OnChangeCollectionTypeGlobalActionCheckboxAction,\n};\n"],"names":["TAB_LABELS","labelId","defaultMessage","id","Permissions","React","forwardRef","layout","isFormDisabled","permissions","userPermissions","api","initialData","layouts","modifiedData","dispatch","useReducer","reducer","initialState","init","formatMessage","useIntl","useImperativeHandle","getPermissions","collectionTypesDiff","difference","collectionTypes","singleTypesDiff","singleTypes","contentTypesDiff","didUpdateConditions","isEmpty","Object","values","some","permission","permissionValue","has","permissionsToSend","formatPermissionsForAPI","resetForm","type","setFormAfterSubmit","handleChangeCollectionTypeLeftActionRowCheckbox","useCallback","pathToCollectionType","propertyName","rowName","value","handleChangeCollectionTypeGlobalActionCheckbox","collectionTypeKind","actionId","handleChangeConditions","conditions","handleChangeSimpleCheckbox","target","name","keys","handleChangeParentCheckbox","_jsx","PermissionsDataManagerProvider","availableConditions","onChangeConditions","onChangeSimpleCheckbox","onChangeParentCheckbox","onChangeCollectionTypeLeftActionRowCheckbox","onChangeCollectionTypeGlobalActionCheckbox","_jsxs","Tabs","Root","defaultValue","List","aria-label","map","tabLabel","Trigger","Content","ContentTypes","kind","PluginsAndSettingsPermissions","plugins","settings","buildInheritedConditionsFromExisting","existing","enabledConditions","isObject","undefined","enabled","Set","reduce","acc","key","inheritConditionsAtPath","data","pathToActionObject","subject","matchingPermission","find","perm","action","obj","existingConditions","get","nextConditions","set","state","produce","draftState","pathToData","forEach","collectionType","collectionTypeActionData","subjectPermissionChecker","createFieldPermissionChecker","updatedValues","updateValuesWithPermissions","updatedConditions","updateValues","nextModifiedDataState","cloneDeep","pathToModifiedDataCollectionType","split","objToUpdate","length","objValue","pathToDataToSet","hasPermission","fields","properties","Array","isArray","f","startsWith","permissionChecker","path","fullFieldPath","join","checker","updatedValue","updateConditionsToFalse","entries","array","stringPathToData","conditionsToUpdate","keysArray","propertiesIndex","indexOf","root","slice","pathToValue","oldValues","createDynamicActionPermissionChecker","subjectForLookup","updatedValuesObj","maybeActionObj","sections","formatLayout","defaultForm","createDefaultCTForm","createDefaultForm"],"mappings":"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"}
@@ -93,7 +93,7 @@ const Row = ({ childrenForm, kind, name, isFormDisabled = false, variant, pathTo
93
93
  });
94
94
  };
95
95
  const SubCategory = ({ actions = [], categoryName, isFormDisabled, subCategoryName, pathToData })=>{
96
- const { modifiedData, onChangeParentCheckbox, onChangeSimpleCheckbox } = usePermissionsDataManager.usePermissionsDataManager();
96
+ const { modifiedData, onChangeParentCheckbox, onChangeSimpleCheckbox, checkUserHasPermission, userPermissions } = usePermissionsDataManager.usePermissionsDataManager();
97
97
  const [isConditionModalOpen, setIsConditionModalOpen] = React__namespace.useState(false);
98
98
  const { formatMessage } = reactIntl.useIntl();
99
99
  const mainData = get(modifiedData, pathToData, {});
@@ -201,6 +201,7 @@ const SubCategory = ({ actions = [], categoryName, isFormDisabled, subCategoryNa
201
201
  flex: 1
202
202
  },
203
203
  children: formattedActions.map(({ checkboxName, value, action, displayName, hasConditions })=>{
204
+ const userHasPermission = checkUserHasPermission(action, null);
204
205
  return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
205
206
  col: 4,
206
207
  m: 6,
@@ -208,11 +209,11 @@ const SubCategory = ({ actions = [], categoryName, isFormDisabled, subCategoryNa
208
209
  direction: "column",
209
210
  alignItems: "start",
210
211
  children: /*#__PURE__*/ jsxRuntime.jsx(CheckboxWrapper, {
211
- $disabled: isFormDisabled,
212
+ $disabled: isFormDisabled || !userHasPermission,
212
213
  $hasConditions: hasConditions,
213
214
  children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Checkbox, {
214
215
  name: checkboxName,
215
- disabled: isFormDisabled,
216
+ disabled: isFormDisabled || !userHasPermission,
216
217
  // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91
217
218
  onCheckedChange: (value)=>{
218
219
  onChangeSimpleCheckbox({
@@ -247,6 +248,7 @@ const SubCategory = ({ actions = [], categoryName, isFormDisabled, subCategoryNa
247
248
  ],
248
249
  actions: formattedActions,
249
250
  isFormDisabled: isFormDisabled,
251
+ isReadOnly: userPermissions !== undefined,
250
252
  onClose: ()=>{
251
253
  setIsConditionModalOpen(false);
252
254
  }