@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
@@ -1 +1 @@
1
- {"version":3,"file":"PluginsAndSettings.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Accordion,\n Box,\n BoxComponent,\n Checkbox,\n Flex,\n Grid,\n Modal,\n Typography,\n} from '@strapi/design-system';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport {\n SettingPermission,\n PluginPermission,\n} from '../../../../../../../shared/contracts/permissions';\nimport { capitalise } from '../../../../../utils/strings';\nimport {\n PermissionsDataManagerContextValue,\n usePermissionsDataManager,\n} from '../hooks/usePermissionsDataManager';\nimport { createArrayOfValues } from '../utils/createArrayOfValues';\nimport { ChildrenForm, ConditionForm } from '../utils/forms';\nimport { RecursiveRecordOfBooleans, getCheckboxState } from '../utils/getCheckboxState';\nimport { removeConditionKeyFromData } from '../utils/removeConditionKeyFromData';\n\nimport { ConditionsButton } from './ConditionsButton';\nimport { ConditionsModal } from './ConditionsModal';\n\nimport type { GenericLayout } from '../utils/layouts';\n\n/* -------------------------------------------------------------------------------------------------\n * PluginsAndSettingsPermissions\n * -----------------------------------------------------------------------------------------------*/\n\ntype Layout = GenericLayout<SettingPermission | PluginPermission>[];\n\ninterface PluginsAndSettingsPermissionsProps extends Pick<RowProps, 'kind' | 'isFormDisabled'> {\n layout: Layout;\n}\n\nconst PluginsAndSettingsPermissions = ({\n layout,\n ...restProps\n}: PluginsAndSettingsPermissionsProps) => {\n return (\n <Box padding={6} background=\"neutral0\">\n <Accordion.Root size=\"M\">\n {layout.map(({ category, categoryId, childrenForm }, index) => {\n return (\n <Row\n key={category}\n childrenForm={childrenForm}\n variant={index % 2 === 1 ? 'primary' : 'secondary'}\n name={category}\n pathToData={[restProps.kind, categoryId]}\n {...restProps}\n />\n );\n })}\n </Accordion.Root>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RowProps\n extends Pick<Layout[number], 'childrenForm'>,\n Pick<Accordion.HeaderProps, 'variant'> {\n kind: Exclude<keyof PermissionsDataManagerContextValue['modifiedData'], `${string}Types`>;\n name: string;\n isFormDisabled?: boolean;\n pathToData: string[];\n}\n\nconst Row = ({\n childrenForm,\n kind,\n name,\n isFormDisabled = false,\n variant,\n pathToData,\n}: RowProps) => {\n const { formatMessage } = useIntl();\n\n const categoryName = name.split('::').pop() ?? '';\n const categoryDisplayName =\n categoryName === 'upload' ? 'Media Library' : capitalise(categoryName.replace(/-/g, ' '));\n\n return (\n <Accordion.Item value={name}>\n <Accordion.Header variant={variant}>\n <Accordion.Trigger\n caretPosition=\"right\"\n description={`${formatMessage(\n { id: 'Settings.permissions.category', defaultMessage: categoryName },\n { category: categoryName }\n )} ${kind === 'plugins' ? 'plugin' : kind}`}\n >\n {categoryDisplayName}\n </Accordion.Trigger>\n </Accordion.Header>\n <Accordion.Content>\n <Box padding={6}>\n {childrenForm.map(({ actions, subCategoryName, subCategoryId }) => (\n <SubCategory\n key={subCategoryName}\n actions={actions}\n categoryName={categoryName}\n isFormDisabled={isFormDisabled}\n subCategoryName={subCategoryName}\n pathToData={[...pathToData, subCategoryId]}\n />\n ))}\n </Box>\n </Accordion.Content>\n </Accordion.Item>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SubCategory\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SubCategoryProps {\n actions?: Array<SettingPermission | PluginPermission>;\n categoryName: string;\n isFormDisabled?: boolean;\n subCategoryName: string;\n pathToData: string[];\n}\n\nconst SubCategory = ({\n actions = [],\n categoryName,\n isFormDisabled,\n subCategoryName,\n pathToData,\n}: SubCategoryProps) => {\n const { modifiedData, onChangeParentCheckbox, onChangeSimpleCheckbox } =\n usePermissionsDataManager();\n const [isConditionModalOpen, setIsConditionModalOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n\n const mainData = get(modifiedData, pathToData, {});\n\n const dataWithoutCondition = React.useMemo(() => {\n return Object.keys(mainData).reduce<RecursiveRecordOfBooleans>((acc, current) => {\n acc[current] = removeConditionKeyFromData(mainData[current])!;\n\n return acc;\n }, {});\n }, [mainData]);\n\n const { hasAllActionsSelected, hasSomeActionsSelected } = getCheckboxState(dataWithoutCondition);\n\n // We need to format the actions so it matches the shape of the ConditionsModal actions props\n const formattedActions = React.useMemo(() => {\n return actions.map((action) => {\n const checkboxName = [...pathToData, action.action, 'properties', 'enabled'];\n const checkboxValue = get(modifiedData, checkboxName, false);\n const conditionValue = get(modifiedData, [...pathToData, action.action, 'conditions'], {});\n const hasConditions = createArrayOfValues(conditionValue).some((val) => val);\n\n return {\n ...action,\n isDisplayed: checkboxValue,\n checkboxName: checkboxName.join('..'),\n hasSomeActionsSelected: checkboxValue,\n value: checkboxValue,\n hasConditions,\n label: action.displayName,\n actionId: action.action,\n pathToConditionsObject: [...pathToData, action.action],\n };\n });\n }, [actions, modifiedData, pathToData]);\n\n const datum: ChildrenForm = get(modifiedData, [...pathToData], {});\n\n const doesButtonHasCondition = createArrayOfValues(\n Object.entries(datum).reduce<Record<string, ConditionForm>>((acc, current) => {\n const [catName, { conditions }] = current;\n\n acc[catName] = conditions;\n\n return acc;\n }, {})\n ).some((val) => val);\n\n return (\n <>\n <Box>\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Box paddingRight={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {subCategoryName}\n </Typography>\n </Box>\n <Border flex={1} />\n <Box paddingLeft={4}>\n <Checkbox\n name={pathToData.join('..')}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeParentCheckbox({\n target: {\n name: pathToData.join('..'),\n value: !!value,\n },\n });\n }}\n checked={hasSomeActionsSelected ? 'indeterminate' : hasAllActionsSelected}\n >\n {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n </Checkbox>\n </Box>\n </Flex>\n <Flex paddingTop={6} paddingBottom={6}>\n <Grid.Root gap={2} style={{ flex: 1 }}>\n {formattedActions.map(({ checkboxName, value, action, displayName, hasConditions }) => {\n return (\n <Grid.Item col={4} m={6} xs={12} key={action} direction=\"column\" alignItems=\"start\">\n <CheckboxWrapper $disabled={isFormDisabled} $hasConditions={hasConditions}>\n <Checkbox\n name={checkboxName}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeSimpleCheckbox({\n target: {\n name: checkboxName,\n value: !!value,\n },\n });\n }}\n checked={value}\n >\n {displayName}\n </Checkbox>\n </CheckboxWrapper>\n </Grid.Item>\n );\n })}\n </Grid.Root>\n <Modal.Root\n open={isConditionModalOpen}\n onOpenChange={() => {\n setIsConditionModalOpen((prev) => !prev);\n }}\n >\n <Modal.Trigger>\n <ConditionsButton hasConditions={doesButtonHasCondition} />\n </Modal.Trigger>\n <ConditionsModal\n headerBreadCrumbs={[categoryName, subCategoryName]}\n actions={formattedActions}\n isFormDisabled={isFormDisabled}\n onClose={() => {\n setIsConditionModalOpen(false);\n }}\n />\n </Modal.Root>\n </Flex>\n </Box>\n </>\n );\n};\n\nconst Border = styled<BoxComponent>(Box)`\n align-self: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst CheckboxWrapper = styled.div<{ $hasConditions?: boolean; $disabled?: boolean }>`\n position: relative;\n word-break: keep-all;\n ${({ $hasConditions, $disabled, theme }) =>\n $hasConditions &&\n `\n &:before {\n content: '';\n position: absolute;\n top: -0.4rem;\n left: -0.8rem;\n width: 0.6rem;\n height: 0.6rem;\n border-radius: 2rem;\n background: ${$disabled ? theme.colors.neutral100 : theme.colors.primary600};\n }\n `}\n`;\n\nexport { PluginsAndSettingsPermissions };\n"],"names":["PluginsAndSettingsPermissions","layout","restProps","_jsx","Box","padding","background","Accordion","Root","size","map","category","categoryId","childrenForm","index","Row","variant","name","pathToData","kind","isFormDisabled","formatMessage","useIntl","categoryName","split","pop","categoryDisplayName","capitalise","replace","_jsxs","Item","value","Header","Trigger","caretPosition","description","id","defaultMessage","Content","actions","subCategoryName","subCategoryId","SubCategory","modifiedData","onChangeParentCheckbox","onChangeSimpleCheckbox","usePermissionsDataManager","isConditionModalOpen","setIsConditionModalOpen","React","useState","mainData","get","dataWithoutCondition","useMemo","Object","keys","reduce","acc","current","removeConditionKeyFromData","hasAllActionsSelected","hasSomeActionsSelected","getCheckboxState","formattedActions","action","checkboxName","checkboxValue","conditionValue","hasConditions","createArrayOfValues","some","val","isDisplayed","join","label","displayName","actionId","pathToConditionsObject","datum","doesButtonHasCondition","entries","catName","conditions","_Fragment","Flex","justifyContent","alignItems","paddingRight","Typography","textColor","Border","flex","paddingLeft","Checkbox","disabled","onCheckedChange","target","checked","paddingTop","paddingBottom","Grid","gap","style","col","m","xs","direction","CheckboxWrapper","$disabled","$hasConditions","Modal","open","onOpenChange","prev","ConditionsButton","ConditionsModal","headerBreadCrumbs","onClose","styled","theme","colors","neutral150","div","neutral100","primary600"],"mappings":"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"}
1
+ {"version":3,"file":"PluginsAndSettings.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Accordion,\n Box,\n BoxComponent,\n Checkbox,\n Flex,\n Grid,\n Modal,\n Typography,\n} from '@strapi/design-system';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport {\n SettingPermission,\n PluginPermission,\n} from '../../../../../../../shared/contracts/permissions';\nimport { capitalise } from '../../../../../utils/strings';\nimport {\n PermissionsDataManagerContextValue,\n usePermissionsDataManager,\n} from '../hooks/usePermissionsDataManager';\nimport { createArrayOfValues } from '../utils/createArrayOfValues';\nimport { ChildrenForm, ConditionForm } from '../utils/forms';\nimport { RecursiveRecordOfBooleans, getCheckboxState } from '../utils/getCheckboxState';\nimport { removeConditionKeyFromData } from '../utils/removeConditionKeyFromData';\n\nimport { ConditionsButton } from './ConditionsButton';\nimport { ConditionsModal } from './ConditionsModal';\n\nimport type { GenericLayout } from '../utils/layouts';\n\n/* -------------------------------------------------------------------------------------------------\n * PluginsAndSettingsPermissions\n * -----------------------------------------------------------------------------------------------*/\n\ntype Layout = GenericLayout<SettingPermission | PluginPermission>[];\n\ninterface PluginsAndSettingsPermissionsProps extends Pick<RowProps, 'kind' | 'isFormDisabled'> {\n layout: Layout;\n}\n\nconst PluginsAndSettingsPermissions = ({\n layout,\n ...restProps\n}: PluginsAndSettingsPermissionsProps) => {\n return (\n <Box padding={6} background=\"neutral0\">\n <Accordion.Root size=\"M\">\n {layout.map(({ category, categoryId, childrenForm }, index) => {\n return (\n <Row\n key={category}\n childrenForm={childrenForm}\n variant={index % 2 === 1 ? 'primary' : 'secondary'}\n name={category}\n pathToData={[restProps.kind, categoryId]}\n {...restProps}\n />\n );\n })}\n </Accordion.Root>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RowProps\n extends Pick<Layout[number], 'childrenForm'>,\n Pick<Accordion.HeaderProps, 'variant'> {\n kind: Exclude<keyof PermissionsDataManagerContextValue['modifiedData'], `${string}Types`>;\n name: string;\n isFormDisabled?: boolean;\n pathToData: string[];\n}\n\nconst Row = ({\n childrenForm,\n kind,\n name,\n isFormDisabled = false,\n variant,\n pathToData,\n}: RowProps) => {\n const { formatMessage } = useIntl();\n\n const categoryName = name.split('::').pop() ?? '';\n const categoryDisplayName =\n categoryName === 'upload' ? 'Media Library' : capitalise(categoryName.replace(/-/g, ' '));\n\n return (\n <Accordion.Item value={name}>\n <Accordion.Header variant={variant}>\n <Accordion.Trigger\n caretPosition=\"right\"\n description={`${formatMessage(\n { id: 'Settings.permissions.category', defaultMessage: categoryName },\n { category: categoryName }\n )} ${kind === 'plugins' ? 'plugin' : kind}`}\n >\n {categoryDisplayName}\n </Accordion.Trigger>\n </Accordion.Header>\n <Accordion.Content>\n <Box padding={6}>\n {childrenForm.map(({ actions, subCategoryName, subCategoryId }) => (\n <SubCategory\n key={subCategoryName}\n actions={actions}\n categoryName={categoryName}\n isFormDisabled={isFormDisabled}\n subCategoryName={subCategoryName}\n pathToData={[...pathToData, subCategoryId]}\n />\n ))}\n </Box>\n </Accordion.Content>\n </Accordion.Item>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SubCategory\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SubCategoryProps {\n actions?: Array<SettingPermission | PluginPermission>;\n categoryName: string;\n isFormDisabled?: boolean;\n subCategoryName: string;\n pathToData: string[];\n}\n\nconst SubCategory = ({\n actions = [],\n categoryName,\n isFormDisabled,\n subCategoryName,\n pathToData,\n}: SubCategoryProps) => {\n const {\n modifiedData,\n onChangeParentCheckbox,\n onChangeSimpleCheckbox,\n checkUserHasPermission,\n userPermissions,\n } = usePermissionsDataManager();\n const [isConditionModalOpen, setIsConditionModalOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n\n const mainData = get(modifiedData, pathToData, {});\n\n const dataWithoutCondition = React.useMemo(() => {\n return Object.keys(mainData).reduce<RecursiveRecordOfBooleans>((acc, current) => {\n acc[current] = removeConditionKeyFromData(mainData[current])!;\n\n return acc;\n }, {});\n }, [mainData]);\n\n const { hasAllActionsSelected, hasSomeActionsSelected } = getCheckboxState(dataWithoutCondition);\n\n // We need to format the actions so it matches the shape of the ConditionsModal actions props\n const formattedActions = React.useMemo(() => {\n return actions.map((action) => {\n const checkboxName = [...pathToData, action.action, 'properties', 'enabled'];\n const checkboxValue = get(modifiedData, checkboxName, false);\n const conditionValue = get(modifiedData, [...pathToData, action.action, 'conditions'], {});\n const hasConditions = createArrayOfValues(conditionValue).some((val) => val);\n\n return {\n ...action,\n isDisplayed: checkboxValue,\n checkboxName: checkboxName.join('..'),\n hasSomeActionsSelected: checkboxValue,\n value: checkboxValue,\n hasConditions,\n label: action.displayName,\n actionId: action.action,\n pathToConditionsObject: [...pathToData, action.action],\n };\n });\n }, [actions, modifiedData, pathToData]);\n\n const datum: ChildrenForm = get(modifiedData, [...pathToData], {});\n\n const doesButtonHasCondition = createArrayOfValues(\n Object.entries(datum).reduce<Record<string, ConditionForm>>((acc, current) => {\n const [catName, { conditions }] = current;\n\n acc[catName] = conditions;\n\n return acc;\n }, {})\n ).some((val) => val);\n\n return (\n <>\n <Box>\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Box paddingRight={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {subCategoryName}\n </Typography>\n </Box>\n <Border flex={1} />\n <Box paddingLeft={4}>\n <Checkbox\n name={pathToData.join('..')}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeParentCheckbox({\n target: {\n name: pathToData.join('..'),\n value: !!value,\n },\n });\n }}\n checked={hasSomeActionsSelected ? 'indeterminate' : hasAllActionsSelected}\n >\n {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n </Checkbox>\n </Box>\n </Flex>\n <Flex paddingTop={6} paddingBottom={6}>\n <Grid.Root gap={2} style={{ flex: 1 }}>\n {formattedActions.map(({ checkboxName, value, action, displayName, hasConditions }) => {\n const userHasPermission = checkUserHasPermission(action, null);\n\n return (\n <Grid.Item col={4} m={6} xs={12} key={action} direction=\"column\" alignItems=\"start\">\n <CheckboxWrapper\n $disabled={isFormDisabled || !userHasPermission}\n $hasConditions={hasConditions}\n >\n <Checkbox\n name={checkboxName}\n disabled={isFormDisabled || !userHasPermission}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeSimpleCheckbox({\n target: {\n name: checkboxName,\n value: !!value,\n },\n });\n }}\n checked={value}\n >\n {displayName}\n </Checkbox>\n </CheckboxWrapper>\n </Grid.Item>\n );\n })}\n </Grid.Root>\n <Modal.Root\n open={isConditionModalOpen}\n onOpenChange={() => {\n setIsConditionModalOpen((prev) => !prev);\n }}\n >\n <Modal.Trigger>\n <ConditionsButton hasConditions={doesButtonHasCondition} />\n </Modal.Trigger>\n <ConditionsModal\n headerBreadCrumbs={[categoryName, subCategoryName]}\n actions={formattedActions}\n isFormDisabled={isFormDisabled}\n isReadOnly={userPermissions !== undefined}\n onClose={() => {\n setIsConditionModalOpen(false);\n }}\n />\n </Modal.Root>\n </Flex>\n </Box>\n </>\n );\n};\n\nconst Border = styled<BoxComponent>(Box)`\n align-self: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst CheckboxWrapper = styled.div<{ $hasConditions?: boolean; $disabled?: boolean }>`\n position: relative;\n word-break: keep-all;\n ${({ $hasConditions, $disabled, theme }) =>\n $hasConditions &&\n `\n &:before {\n content: '';\n position: absolute;\n top: -0.4rem;\n left: -0.8rem;\n width: 0.6rem;\n height: 0.6rem;\n border-radius: 2rem;\n background: ${$disabled ? theme.colors.neutral100 : theme.colors.primary600};\n }\n `}\n`;\n\nexport { PluginsAndSettingsPermissions };\n"],"names":["PluginsAndSettingsPermissions","layout","restProps","_jsx","Box","padding","background","Accordion","Root","size","map","category","categoryId","childrenForm","index","Row","variant","name","pathToData","kind","isFormDisabled","formatMessage","useIntl","categoryName","split","pop","categoryDisplayName","capitalise","replace","_jsxs","Item","value","Header","Trigger","caretPosition","description","id","defaultMessage","Content","actions","subCategoryName","subCategoryId","SubCategory","modifiedData","onChangeParentCheckbox","onChangeSimpleCheckbox","checkUserHasPermission","userPermissions","usePermissionsDataManager","isConditionModalOpen","setIsConditionModalOpen","React","useState","mainData","get","dataWithoutCondition","useMemo","Object","keys","reduce","acc","current","removeConditionKeyFromData","hasAllActionsSelected","hasSomeActionsSelected","getCheckboxState","formattedActions","action","checkboxName","checkboxValue","conditionValue","hasConditions","createArrayOfValues","some","val","isDisplayed","join","label","displayName","actionId","pathToConditionsObject","datum","doesButtonHasCondition","entries","catName","conditions","_Fragment","Flex","justifyContent","alignItems","paddingRight","Typography","textColor","Border","flex","paddingLeft","Checkbox","disabled","onCheckedChange","target","checked","paddingTop","paddingBottom","Grid","gap","style","userHasPermission","col","m","xs","direction","CheckboxWrapper","$disabled","$hasConditions","Modal","open","onOpenChange","prev","ConditionsButton","ConditionsModal","headerBreadCrumbs","isReadOnly","undefined","onClose","styled","theme","colors","neutral150","div","neutral100","primary600"],"mappings":"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"}
@@ -72,7 +72,7 @@ const Row = ({ childrenForm, kind, name, isFormDisabled = false, variant, pathTo
72
72
  });
73
73
  };
74
74
  const SubCategory = ({ actions = [], categoryName, isFormDisabled, subCategoryName, pathToData })=>{
75
- const { modifiedData, onChangeParentCheckbox, onChangeSimpleCheckbox } = usePermissionsDataManager();
75
+ const { modifiedData, onChangeParentCheckbox, onChangeSimpleCheckbox, checkUserHasPermission, userPermissions } = usePermissionsDataManager();
76
76
  const [isConditionModalOpen, setIsConditionModalOpen] = React.useState(false);
77
77
  const { formatMessage } = useIntl();
78
78
  const mainData = get(modifiedData, pathToData, {});
@@ -180,6 +180,7 @@ const SubCategory = ({ actions = [], categoryName, isFormDisabled, subCategoryNa
180
180
  flex: 1
181
181
  },
182
182
  children: formattedActions.map(({ checkboxName, value, action, displayName, hasConditions })=>{
183
+ const userHasPermission = checkUserHasPermission(action, null);
183
184
  return /*#__PURE__*/ jsx(Grid.Item, {
184
185
  col: 4,
185
186
  m: 6,
@@ -187,11 +188,11 @@ const SubCategory = ({ actions = [], categoryName, isFormDisabled, subCategoryNa
187
188
  direction: "column",
188
189
  alignItems: "start",
189
190
  children: /*#__PURE__*/ jsx(CheckboxWrapper, {
190
- $disabled: isFormDisabled,
191
+ $disabled: isFormDisabled || !userHasPermission,
191
192
  $hasConditions: hasConditions,
192
193
  children: /*#__PURE__*/ jsx(Checkbox, {
193
194
  name: checkboxName,
194
- disabled: isFormDisabled,
195
+ disabled: isFormDisabled || !userHasPermission,
195
196
  // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91
196
197
  onCheckedChange: (value)=>{
197
198
  onChangeSimpleCheckbox({
@@ -226,6 +227,7 @@ const SubCategory = ({ actions = [], categoryName, isFormDisabled, subCategoryNa
226
227
  ],
227
228
  actions: formattedActions,
228
229
  isFormDisabled: isFormDisabled,
230
+ isReadOnly: userPermissions !== undefined,
229
231
  onClose: ()=>{
230
232
  setIsConditionModalOpen(false);
231
233
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PluginsAndSettings.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Accordion,\n Box,\n BoxComponent,\n Checkbox,\n Flex,\n Grid,\n Modal,\n Typography,\n} from '@strapi/design-system';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport {\n SettingPermission,\n PluginPermission,\n} from '../../../../../../../shared/contracts/permissions';\nimport { capitalise } from '../../../../../utils/strings';\nimport {\n PermissionsDataManagerContextValue,\n usePermissionsDataManager,\n} from '../hooks/usePermissionsDataManager';\nimport { createArrayOfValues } from '../utils/createArrayOfValues';\nimport { ChildrenForm, ConditionForm } from '../utils/forms';\nimport { RecursiveRecordOfBooleans, getCheckboxState } from '../utils/getCheckboxState';\nimport { removeConditionKeyFromData } from '../utils/removeConditionKeyFromData';\n\nimport { ConditionsButton } from './ConditionsButton';\nimport { ConditionsModal } from './ConditionsModal';\n\nimport type { GenericLayout } from '../utils/layouts';\n\n/* -------------------------------------------------------------------------------------------------\n * PluginsAndSettingsPermissions\n * -----------------------------------------------------------------------------------------------*/\n\ntype Layout = GenericLayout<SettingPermission | PluginPermission>[];\n\ninterface PluginsAndSettingsPermissionsProps extends Pick<RowProps, 'kind' | 'isFormDisabled'> {\n layout: Layout;\n}\n\nconst PluginsAndSettingsPermissions = ({\n layout,\n ...restProps\n}: PluginsAndSettingsPermissionsProps) => {\n return (\n <Box padding={6} background=\"neutral0\">\n <Accordion.Root size=\"M\">\n {layout.map(({ category, categoryId, childrenForm }, index) => {\n return (\n <Row\n key={category}\n childrenForm={childrenForm}\n variant={index % 2 === 1 ? 'primary' : 'secondary'}\n name={category}\n pathToData={[restProps.kind, categoryId]}\n {...restProps}\n />\n );\n })}\n </Accordion.Root>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RowProps\n extends Pick<Layout[number], 'childrenForm'>,\n Pick<Accordion.HeaderProps, 'variant'> {\n kind: Exclude<keyof PermissionsDataManagerContextValue['modifiedData'], `${string}Types`>;\n name: string;\n isFormDisabled?: boolean;\n pathToData: string[];\n}\n\nconst Row = ({\n childrenForm,\n kind,\n name,\n isFormDisabled = false,\n variant,\n pathToData,\n}: RowProps) => {\n const { formatMessage } = useIntl();\n\n const categoryName = name.split('::').pop() ?? '';\n const categoryDisplayName =\n categoryName === 'upload' ? 'Media Library' : capitalise(categoryName.replace(/-/g, ' '));\n\n return (\n <Accordion.Item value={name}>\n <Accordion.Header variant={variant}>\n <Accordion.Trigger\n caretPosition=\"right\"\n description={`${formatMessage(\n { id: 'Settings.permissions.category', defaultMessage: categoryName },\n { category: categoryName }\n )} ${kind === 'plugins' ? 'plugin' : kind}`}\n >\n {categoryDisplayName}\n </Accordion.Trigger>\n </Accordion.Header>\n <Accordion.Content>\n <Box padding={6}>\n {childrenForm.map(({ actions, subCategoryName, subCategoryId }) => (\n <SubCategory\n key={subCategoryName}\n actions={actions}\n categoryName={categoryName}\n isFormDisabled={isFormDisabled}\n subCategoryName={subCategoryName}\n pathToData={[...pathToData, subCategoryId]}\n />\n ))}\n </Box>\n </Accordion.Content>\n </Accordion.Item>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SubCategory\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SubCategoryProps {\n actions?: Array<SettingPermission | PluginPermission>;\n categoryName: string;\n isFormDisabled?: boolean;\n subCategoryName: string;\n pathToData: string[];\n}\n\nconst SubCategory = ({\n actions = [],\n categoryName,\n isFormDisabled,\n subCategoryName,\n pathToData,\n}: SubCategoryProps) => {\n const { modifiedData, onChangeParentCheckbox, onChangeSimpleCheckbox } =\n usePermissionsDataManager();\n const [isConditionModalOpen, setIsConditionModalOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n\n const mainData = get(modifiedData, pathToData, {});\n\n const dataWithoutCondition = React.useMemo(() => {\n return Object.keys(mainData).reduce<RecursiveRecordOfBooleans>((acc, current) => {\n acc[current] = removeConditionKeyFromData(mainData[current])!;\n\n return acc;\n }, {});\n }, [mainData]);\n\n const { hasAllActionsSelected, hasSomeActionsSelected } = getCheckboxState(dataWithoutCondition);\n\n // We need to format the actions so it matches the shape of the ConditionsModal actions props\n const formattedActions = React.useMemo(() => {\n return actions.map((action) => {\n const checkboxName = [...pathToData, action.action, 'properties', 'enabled'];\n const checkboxValue = get(modifiedData, checkboxName, false);\n const conditionValue = get(modifiedData, [...pathToData, action.action, 'conditions'], {});\n const hasConditions = createArrayOfValues(conditionValue).some((val) => val);\n\n return {\n ...action,\n isDisplayed: checkboxValue,\n checkboxName: checkboxName.join('..'),\n hasSomeActionsSelected: checkboxValue,\n value: checkboxValue,\n hasConditions,\n label: action.displayName,\n actionId: action.action,\n pathToConditionsObject: [...pathToData, action.action],\n };\n });\n }, [actions, modifiedData, pathToData]);\n\n const datum: ChildrenForm = get(modifiedData, [...pathToData], {});\n\n const doesButtonHasCondition = createArrayOfValues(\n Object.entries(datum).reduce<Record<string, ConditionForm>>((acc, current) => {\n const [catName, { conditions }] = current;\n\n acc[catName] = conditions;\n\n return acc;\n }, {})\n ).some((val) => val);\n\n return (\n <>\n <Box>\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Box paddingRight={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {subCategoryName}\n </Typography>\n </Box>\n <Border flex={1} />\n <Box paddingLeft={4}>\n <Checkbox\n name={pathToData.join('..')}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeParentCheckbox({\n target: {\n name: pathToData.join('..'),\n value: !!value,\n },\n });\n }}\n checked={hasSomeActionsSelected ? 'indeterminate' : hasAllActionsSelected}\n >\n {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n </Checkbox>\n </Box>\n </Flex>\n <Flex paddingTop={6} paddingBottom={6}>\n <Grid.Root gap={2} style={{ flex: 1 }}>\n {formattedActions.map(({ checkboxName, value, action, displayName, hasConditions }) => {\n return (\n <Grid.Item col={4} m={6} xs={12} key={action} direction=\"column\" alignItems=\"start\">\n <CheckboxWrapper $disabled={isFormDisabled} $hasConditions={hasConditions}>\n <Checkbox\n name={checkboxName}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeSimpleCheckbox({\n target: {\n name: checkboxName,\n value: !!value,\n },\n });\n }}\n checked={value}\n >\n {displayName}\n </Checkbox>\n </CheckboxWrapper>\n </Grid.Item>\n );\n })}\n </Grid.Root>\n <Modal.Root\n open={isConditionModalOpen}\n onOpenChange={() => {\n setIsConditionModalOpen((prev) => !prev);\n }}\n >\n <Modal.Trigger>\n <ConditionsButton hasConditions={doesButtonHasCondition} />\n </Modal.Trigger>\n <ConditionsModal\n headerBreadCrumbs={[categoryName, subCategoryName]}\n actions={formattedActions}\n isFormDisabled={isFormDisabled}\n onClose={() => {\n setIsConditionModalOpen(false);\n }}\n />\n </Modal.Root>\n </Flex>\n </Box>\n </>\n );\n};\n\nconst Border = styled<BoxComponent>(Box)`\n align-self: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst CheckboxWrapper = styled.div<{ $hasConditions?: boolean; $disabled?: boolean }>`\n position: relative;\n word-break: keep-all;\n ${({ $hasConditions, $disabled, theme }) =>\n $hasConditions &&\n `\n &:before {\n content: '';\n position: absolute;\n top: -0.4rem;\n left: -0.8rem;\n width: 0.6rem;\n height: 0.6rem;\n border-radius: 2rem;\n background: ${$disabled ? theme.colors.neutral100 : theme.colors.primary600};\n }\n `}\n`;\n\nexport { PluginsAndSettingsPermissions };\n"],"names":["PluginsAndSettingsPermissions","layout","restProps","_jsx","Box","padding","background","Accordion","Root","size","map","category","categoryId","childrenForm","index","Row","variant","name","pathToData","kind","isFormDisabled","formatMessage","useIntl","categoryName","split","pop","categoryDisplayName","capitalise","replace","_jsxs","Item","value","Header","Trigger","caretPosition","description","id","defaultMessage","Content","actions","subCategoryName","subCategoryId","SubCategory","modifiedData","onChangeParentCheckbox","onChangeSimpleCheckbox","usePermissionsDataManager","isConditionModalOpen","setIsConditionModalOpen","React","useState","mainData","get","dataWithoutCondition","useMemo","Object","keys","reduce","acc","current","removeConditionKeyFromData","hasAllActionsSelected","hasSomeActionsSelected","getCheckboxState","formattedActions","action","checkboxName","checkboxValue","conditionValue","hasConditions","createArrayOfValues","some","val","isDisplayed","join","label","displayName","actionId","pathToConditionsObject","datum","doesButtonHasCondition","entries","catName","conditions","_Fragment","Flex","justifyContent","alignItems","paddingRight","Typography","textColor","Border","flex","paddingLeft","Checkbox","disabled","onCheckedChange","target","checked","paddingTop","paddingBottom","Grid","gap","style","col","m","xs","direction","CheckboxWrapper","$disabled","$hasConditions","Modal","open","onOpenChange","prev","ConditionsButton","ConditionsModal","headerBreadCrumbs","onClose","styled","theme","colors","neutral150","div","neutral100","primary600"],"mappings":"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"}
1
+ {"version":3,"file":"PluginsAndSettings.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Accordion,\n Box,\n BoxComponent,\n Checkbox,\n Flex,\n Grid,\n Modal,\n Typography,\n} from '@strapi/design-system';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport {\n SettingPermission,\n PluginPermission,\n} from '../../../../../../../shared/contracts/permissions';\nimport { capitalise } from '../../../../../utils/strings';\nimport {\n PermissionsDataManagerContextValue,\n usePermissionsDataManager,\n} from '../hooks/usePermissionsDataManager';\nimport { createArrayOfValues } from '../utils/createArrayOfValues';\nimport { ChildrenForm, ConditionForm } from '../utils/forms';\nimport { RecursiveRecordOfBooleans, getCheckboxState } from '../utils/getCheckboxState';\nimport { removeConditionKeyFromData } from '../utils/removeConditionKeyFromData';\n\nimport { ConditionsButton } from './ConditionsButton';\nimport { ConditionsModal } from './ConditionsModal';\n\nimport type { GenericLayout } from '../utils/layouts';\n\n/* -------------------------------------------------------------------------------------------------\n * PluginsAndSettingsPermissions\n * -----------------------------------------------------------------------------------------------*/\n\ntype Layout = GenericLayout<SettingPermission | PluginPermission>[];\n\ninterface PluginsAndSettingsPermissionsProps extends Pick<RowProps, 'kind' | 'isFormDisabled'> {\n layout: Layout;\n}\n\nconst PluginsAndSettingsPermissions = ({\n layout,\n ...restProps\n}: PluginsAndSettingsPermissionsProps) => {\n return (\n <Box padding={6} background=\"neutral0\">\n <Accordion.Root size=\"M\">\n {layout.map(({ category, categoryId, childrenForm }, index) => {\n return (\n <Row\n key={category}\n childrenForm={childrenForm}\n variant={index % 2 === 1 ? 'primary' : 'secondary'}\n name={category}\n pathToData={[restProps.kind, categoryId]}\n {...restProps}\n />\n );\n })}\n </Accordion.Root>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RowProps\n extends Pick<Layout[number], 'childrenForm'>,\n Pick<Accordion.HeaderProps, 'variant'> {\n kind: Exclude<keyof PermissionsDataManagerContextValue['modifiedData'], `${string}Types`>;\n name: string;\n isFormDisabled?: boolean;\n pathToData: string[];\n}\n\nconst Row = ({\n childrenForm,\n kind,\n name,\n isFormDisabled = false,\n variant,\n pathToData,\n}: RowProps) => {\n const { formatMessage } = useIntl();\n\n const categoryName = name.split('::').pop() ?? '';\n const categoryDisplayName =\n categoryName === 'upload' ? 'Media Library' : capitalise(categoryName.replace(/-/g, ' '));\n\n return (\n <Accordion.Item value={name}>\n <Accordion.Header variant={variant}>\n <Accordion.Trigger\n caretPosition=\"right\"\n description={`${formatMessage(\n { id: 'Settings.permissions.category', defaultMessage: categoryName },\n { category: categoryName }\n )} ${kind === 'plugins' ? 'plugin' : kind}`}\n >\n {categoryDisplayName}\n </Accordion.Trigger>\n </Accordion.Header>\n <Accordion.Content>\n <Box padding={6}>\n {childrenForm.map(({ actions, subCategoryName, subCategoryId }) => (\n <SubCategory\n key={subCategoryName}\n actions={actions}\n categoryName={categoryName}\n isFormDisabled={isFormDisabled}\n subCategoryName={subCategoryName}\n pathToData={[...pathToData, subCategoryId]}\n />\n ))}\n </Box>\n </Accordion.Content>\n </Accordion.Item>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SubCategory\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SubCategoryProps {\n actions?: Array<SettingPermission | PluginPermission>;\n categoryName: string;\n isFormDisabled?: boolean;\n subCategoryName: string;\n pathToData: string[];\n}\n\nconst SubCategory = ({\n actions = [],\n categoryName,\n isFormDisabled,\n subCategoryName,\n pathToData,\n}: SubCategoryProps) => {\n const {\n modifiedData,\n onChangeParentCheckbox,\n onChangeSimpleCheckbox,\n checkUserHasPermission,\n userPermissions,\n } = usePermissionsDataManager();\n const [isConditionModalOpen, setIsConditionModalOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n\n const mainData = get(modifiedData, pathToData, {});\n\n const dataWithoutCondition = React.useMemo(() => {\n return Object.keys(mainData).reduce<RecursiveRecordOfBooleans>((acc, current) => {\n acc[current] = removeConditionKeyFromData(mainData[current])!;\n\n return acc;\n }, {});\n }, [mainData]);\n\n const { hasAllActionsSelected, hasSomeActionsSelected } = getCheckboxState(dataWithoutCondition);\n\n // We need to format the actions so it matches the shape of the ConditionsModal actions props\n const formattedActions = React.useMemo(() => {\n return actions.map((action) => {\n const checkboxName = [...pathToData, action.action, 'properties', 'enabled'];\n const checkboxValue = get(modifiedData, checkboxName, false);\n const conditionValue = get(modifiedData, [...pathToData, action.action, 'conditions'], {});\n const hasConditions = createArrayOfValues(conditionValue).some((val) => val);\n\n return {\n ...action,\n isDisplayed: checkboxValue,\n checkboxName: checkboxName.join('..'),\n hasSomeActionsSelected: checkboxValue,\n value: checkboxValue,\n hasConditions,\n label: action.displayName,\n actionId: action.action,\n pathToConditionsObject: [...pathToData, action.action],\n };\n });\n }, [actions, modifiedData, pathToData]);\n\n const datum: ChildrenForm = get(modifiedData, [...pathToData], {});\n\n const doesButtonHasCondition = createArrayOfValues(\n Object.entries(datum).reduce<Record<string, ConditionForm>>((acc, current) => {\n const [catName, { conditions }] = current;\n\n acc[catName] = conditions;\n\n return acc;\n }, {})\n ).some((val) => val);\n\n return (\n <>\n <Box>\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Box paddingRight={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {subCategoryName}\n </Typography>\n </Box>\n <Border flex={1} />\n <Box paddingLeft={4}>\n <Checkbox\n name={pathToData.join('..')}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeParentCheckbox({\n target: {\n name: pathToData.join('..'),\n value: !!value,\n },\n });\n }}\n checked={hasSomeActionsSelected ? 'indeterminate' : hasAllActionsSelected}\n >\n {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n </Checkbox>\n </Box>\n </Flex>\n <Flex paddingTop={6} paddingBottom={6}>\n <Grid.Root gap={2} style={{ flex: 1 }}>\n {formattedActions.map(({ checkboxName, value, action, displayName, hasConditions }) => {\n const userHasPermission = checkUserHasPermission(action, null);\n\n return (\n <Grid.Item col={4} m={6} xs={12} key={action} direction=\"column\" alignItems=\"start\">\n <CheckboxWrapper\n $disabled={isFormDisabled || !userHasPermission}\n $hasConditions={hasConditions}\n >\n <Checkbox\n name={checkboxName}\n disabled={isFormDisabled || !userHasPermission}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeSimpleCheckbox({\n target: {\n name: checkboxName,\n value: !!value,\n },\n });\n }}\n checked={value}\n >\n {displayName}\n </Checkbox>\n </CheckboxWrapper>\n </Grid.Item>\n );\n })}\n </Grid.Root>\n <Modal.Root\n open={isConditionModalOpen}\n onOpenChange={() => {\n setIsConditionModalOpen((prev) => !prev);\n }}\n >\n <Modal.Trigger>\n <ConditionsButton hasConditions={doesButtonHasCondition} />\n </Modal.Trigger>\n <ConditionsModal\n headerBreadCrumbs={[categoryName, subCategoryName]}\n actions={formattedActions}\n isFormDisabled={isFormDisabled}\n isReadOnly={userPermissions !== undefined}\n onClose={() => {\n setIsConditionModalOpen(false);\n }}\n />\n </Modal.Root>\n </Flex>\n </Box>\n </>\n );\n};\n\nconst Border = styled<BoxComponent>(Box)`\n align-self: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst CheckboxWrapper = styled.div<{ $hasConditions?: boolean; $disabled?: boolean }>`\n position: relative;\n word-break: keep-all;\n ${({ $hasConditions, $disabled, theme }) =>\n $hasConditions &&\n `\n &:before {\n content: '';\n position: absolute;\n top: -0.4rem;\n left: -0.8rem;\n width: 0.6rem;\n height: 0.6rem;\n border-radius: 2rem;\n background: ${$disabled ? theme.colors.neutral100 : theme.colors.primary600};\n }\n `}\n`;\n\nexport { PluginsAndSettingsPermissions };\n"],"names":["PluginsAndSettingsPermissions","layout","restProps","_jsx","Box","padding","background","Accordion","Root","size","map","category","categoryId","childrenForm","index","Row","variant","name","pathToData","kind","isFormDisabled","formatMessage","useIntl","categoryName","split","pop","categoryDisplayName","capitalise","replace","_jsxs","Item","value","Header","Trigger","caretPosition","description","id","defaultMessage","Content","actions","subCategoryName","subCategoryId","SubCategory","modifiedData","onChangeParentCheckbox","onChangeSimpleCheckbox","checkUserHasPermission","userPermissions","usePermissionsDataManager","isConditionModalOpen","setIsConditionModalOpen","React","useState","mainData","get","dataWithoutCondition","useMemo","Object","keys","reduce","acc","current","removeConditionKeyFromData","hasAllActionsSelected","hasSomeActionsSelected","getCheckboxState","formattedActions","action","checkboxName","checkboxValue","conditionValue","hasConditions","createArrayOfValues","some","val","isDisplayed","join","label","displayName","actionId","pathToConditionsObject","datum","doesButtonHasCondition","entries","catName","conditions","_Fragment","Flex","justifyContent","alignItems","paddingRight","Typography","textColor","Border","flex","paddingLeft","Checkbox","disabled","onCheckedChange","target","checked","paddingTop","paddingBottom","Grid","gap","style","userHasPermission","col","m","xs","direction","CheckboxWrapper","$disabled","$hasConditions","Modal","open","onOpenChange","prev","ConditionsButton","ConditionsModal","headerBreadCrumbs","isReadOnly","undefined","onClose","styled","theme","colors","neutral150","div","neutral100","primary600"],"mappings":"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"}
@@ -1,9 +1,67 @@
1
1
  'use strict';
2
2
 
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
3
5
  var reactContext = require('@radix-ui/react-context');
4
6
 
5
- const [PermissionsDataManagerProvider, usePermissionsDataManagerContext] = reactContext.createContext('PermissionsDataManager');
7
+ function _interopNamespaceDefault(e) {
8
+ var n = Object.create(null);
9
+ if (e) {
10
+ Object.keys(e).forEach(function (k) {
11
+ if (k !== 'default') {
12
+ var d = Object.getOwnPropertyDescriptor(e, k);
13
+ Object.defineProperty(n, k, d.get ? d : {
14
+ enumerable: true,
15
+ get: function () { return e[k]; }
16
+ });
17
+ }
18
+ });
19
+ }
20
+ n.default = e;
21
+ return Object.freeze(n);
22
+ }
23
+
24
+ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
25
+
26
+ // eslint-disable-next-line check-file/filename-naming-convention
27
+ const [PermissionsDataManagerProviderRaw, usePermissionsDataManagerContext] = reactContext.createContext('PermissionsDataManager');
6
28
  const usePermissionsDataManager = ()=>usePermissionsDataManagerContext('usePermissionsDataManager');
29
+ const PermissionsDataManagerProvider = ({ children, userPermissions, availableConditions, modifiedData, onChangeConditions, onChangeSimpleCheckbox, onChangeParentCheckbox, onChangeCollectionTypeLeftActionRowCheckbox, onChangeCollectionTypeGlobalActionCheckbox })=>{
30
+ const checkUserHasPermission = React__namespace.useCallback((action, subject, field)=>{
31
+ if (userPermissions === undefined) {
32
+ return true;
33
+ }
34
+ const matchingPermission = userPermissions.find((perm)=>perm.action === action && perm.subject === subject);
35
+ if (matchingPermission === undefined) {
36
+ return false;
37
+ }
38
+ if (field === undefined) {
39
+ return true;
40
+ }
41
+ const fields = matchingPermission.properties?.fields;
42
+ if (fields === null || fields === undefined) {
43
+ return true;
44
+ }
45
+ if (Array.isArray(fields) === false || fields.length === 0) {
46
+ return false;
47
+ }
48
+ return fields.some((allowedField)=>allowedField === field || field.startsWith(`${allowedField}.`));
49
+ }, [
50
+ userPermissions
51
+ ]);
52
+ return /*#__PURE__*/ jsxRuntime.jsx(PermissionsDataManagerProviderRaw, {
53
+ availableConditions: availableConditions,
54
+ modifiedData: modifiedData,
55
+ onChangeConditions: onChangeConditions,
56
+ onChangeSimpleCheckbox: onChangeSimpleCheckbox,
57
+ onChangeParentCheckbox: onChangeParentCheckbox,
58
+ onChangeCollectionTypeLeftActionRowCheckbox: onChangeCollectionTypeLeftActionRowCheckbox,
59
+ onChangeCollectionTypeGlobalActionCheckbox: onChangeCollectionTypeGlobalActionCheckbox,
60
+ userPermissions: userPermissions,
61
+ checkUserHasPermission: checkUserHasPermission,
62
+ children: children
63
+ });
64
+ };
7
65
 
8
66
  exports.PermissionsDataManagerProvider = PermissionsDataManagerProvider;
9
67
  exports.usePermissionsDataManager = usePermissionsDataManager;
@@ -1 +1 @@
1
- {"version":3,"file":"usePermissionsDataManager.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.ts"],"sourcesContent":["import { createContext } from '@radix-ui/react-context';\n\nimport { Condition } from '../../../../../../../shared/contracts/permissions';\n\nimport type {\n OnChangeCollectionTypeGlobalActionCheckboxAction,\n OnChangeCollectionTypeRowLeftCheckboxAction,\n OnChangeConditionsAction,\n State,\n} from '../components/Permissions';\n\n// Note: I had to guess most of these types based on the name and usage, but I actually don't\n// know if they are correct, because the usage is very generic. Feel free to correct them if\n// they create problems.\nexport interface PermissionsDataManagerContextValue extends Pick<State, 'modifiedData'> {\n availableConditions: Condition[];\n onChangeCollectionTypeLeftActionRowCheckbox: (\n pathToCollectionType: OnChangeCollectionTypeRowLeftCheckboxAction['pathToCollectionType'],\n propertyName: OnChangeCollectionTypeRowLeftCheckboxAction['propertyName'],\n rowName: OnChangeCollectionTypeRowLeftCheckboxAction['rowName'],\n value: OnChangeCollectionTypeRowLeftCheckboxAction['value']\n ) => void;\n onChangeConditions: (conditions: OnChangeConditionsAction['conditions']) => void;\n onChangeSimpleCheckbox: (event: { target: { name: string; value: boolean } }) => void;\n onChangeParentCheckbox: (event: { target: { name: string; value: boolean } }) => void;\n onChangeCollectionTypeGlobalActionCheckbox: (\n collectionTypeKind: OnChangeCollectionTypeGlobalActionCheckboxAction['collectionTypeKind'],\n actionId: OnChangeCollectionTypeGlobalActionCheckboxAction['actionId'],\n value: OnChangeCollectionTypeGlobalActionCheckboxAction['value']\n ) => void;\n}\n\nconst [PermissionsDataManagerProvider, usePermissionsDataManagerContext] =\n createContext<PermissionsDataManagerContextValue>('PermissionsDataManager');\n\nexport const usePermissionsDataManager = () =>\n usePermissionsDataManagerContext('usePermissionsDataManager');\n\nexport { PermissionsDataManagerProvider };\n"],"names":["PermissionsDataManagerProvider","usePermissionsDataManagerContext","createContext","usePermissionsDataManager"],"mappings":";;;;AAgCA,MAAM,CAACA,8BAAAA,EAAgCC,gCAAAA,CAAiC,GACtEC,0BAAAA,CAAkD,wBAAA;AAE7C,MAAMC,yBAAAA,GAA4B,IACvCF,gCAAAA,CAAiC,2BAAA;;;;;"}
1
+ {"version":3,"file":"usePermissionsDataManager.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.tsx"],"sourcesContent":["// eslint-disable-next-line check-file/filename-naming-convention\nimport * as React from 'react';\n\nimport { createContext } from '@radix-ui/react-context';\n\nimport { Condition } from '../../../../../../../shared/contracts/permissions';\nimport { Permission as AuthPermission } from '../../../../../features/Auth';\n\nimport type {\n OnChangeCollectionTypeGlobalActionCheckboxAction,\n OnChangeCollectionTypeRowLeftCheckboxAction,\n OnChangeConditionsAction,\n State,\n} from '../components/Permissions';\n\n// Note: I had to guess most of these types based on the name and usage, but I actually don't\n// know if they are correct, because the usage is very generic. Feel free to correct them if\n// they create problems.\nexport interface PermissionsDataManagerContextValue extends Pick<State, 'modifiedData'> {\n availableConditions: Condition[];\n onChangeCollectionTypeLeftActionRowCheckbox: (\n pathToCollectionType: OnChangeCollectionTypeRowLeftCheckboxAction['pathToCollectionType'],\n propertyName: OnChangeCollectionTypeRowLeftCheckboxAction['propertyName'],\n rowName: OnChangeCollectionTypeRowLeftCheckboxAction['rowName'],\n value: OnChangeCollectionTypeRowLeftCheckboxAction['value']\n ) => void;\n onChangeConditions: (conditions: OnChangeConditionsAction['conditions']) => void;\n onChangeSimpleCheckbox: (event: { target: { name: string; value: boolean } }) => void;\n onChangeParentCheckbox: (event: { target: { name: string; value: boolean } }) => void;\n onChangeCollectionTypeGlobalActionCheckbox: (\n collectionTypeKind: OnChangeCollectionTypeGlobalActionCheckboxAction['collectionTypeKind'],\n actionId: OnChangeCollectionTypeGlobalActionCheckboxAction['actionId'],\n value: OnChangeCollectionTypeGlobalActionCheckboxAction['value']\n ) => void;\n userPermissions?: AuthPermission[];\n checkUserHasPermission: (action: string, subject?: string | null, field?: string) => boolean;\n}\n\nconst [PermissionsDataManagerProviderRaw, usePermissionsDataManagerContext] =\n createContext<PermissionsDataManagerContextValue>('PermissionsDataManager');\n\nexport const usePermissionsDataManager = () =>\n usePermissionsDataManagerContext('usePermissionsDataManager');\n\ninterface PermissionsDataManagerProviderProps\n extends Omit<PermissionsDataManagerContextValue, 'checkUserHasPermission'> {\n children: React.ReactNode;\n}\n\nconst PermissionsDataManagerProvider = ({\n children,\n userPermissions,\n availableConditions,\n modifiedData,\n onChangeConditions,\n onChangeSimpleCheckbox,\n onChangeParentCheckbox,\n onChangeCollectionTypeLeftActionRowCheckbox,\n onChangeCollectionTypeGlobalActionCheckbox,\n}: PermissionsDataManagerProviderProps) => {\n const checkUserHasPermission = React.useCallback(\n (action: string, subject?: string | null, field?: string): boolean => {\n if (userPermissions === undefined) {\n return true;\n }\n\n const matchingPermission = userPermissions.find(\n (perm) => perm.action === action && perm.subject === subject\n );\n\n if (matchingPermission === undefined) {\n return false;\n }\n\n if (field === undefined) {\n return true;\n }\n\n const fields = matchingPermission.properties?.fields;\n\n if (fields === null || fields === undefined) {\n return true;\n }\n\n if (Array.isArray(fields) === false || fields.length === 0) {\n return false;\n }\n\n return fields.some(\n (allowedField) => allowedField === field || field.startsWith(`${allowedField}.`)\n );\n },\n [userPermissions]\n );\n\n return (\n <PermissionsDataManagerProviderRaw\n availableConditions={availableConditions}\n modifiedData={modifiedData}\n onChangeConditions={onChangeConditions}\n onChangeSimpleCheckbox={onChangeSimpleCheckbox}\n onChangeParentCheckbox={onChangeParentCheckbox}\n onChangeCollectionTypeLeftActionRowCheckbox={onChangeCollectionTypeLeftActionRowCheckbox}\n onChangeCollectionTypeGlobalActionCheckbox={onChangeCollectionTypeGlobalActionCheckbox}\n userPermissions={userPermissions}\n checkUserHasPermission={checkUserHasPermission}\n >\n {children}\n </PermissionsDataManagerProviderRaw>\n );\n};\n\nexport { PermissionsDataManagerProvider };\n"],"names":["PermissionsDataManagerProviderRaw","usePermissionsDataManagerContext","createContext","usePermissionsDataManager","PermissionsDataManagerProvider","children","userPermissions","availableConditions","modifiedData","onChangeConditions","onChangeSimpleCheckbox","onChangeParentCheckbox","onChangeCollectionTypeLeftActionRowCheckbox","onChangeCollectionTypeGlobalActionCheckbox","checkUserHasPermission","React","useCallback","action","subject","field","undefined","matchingPermission","find","perm","fields","properties","Array","isArray","length","some","allowedField","startsWith","_jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAsCA,MAAM,CAACA,iCAAAA,EAAmCC,gCAAAA,CAAiC,GACzEC,0BAAAA,CAAkD,wBAAA,CAAA;AAE7C,MAAMC,yBAAAA,GAA4B,IACvCF,gCAAAA,CAAiC,2BAAA;AAOnC,MAAMG,8BAAAA,GAAiC,CAAC,EACtCC,QAAQ,EACRC,eAAe,EACfC,mBAAmB,EACnBC,YAAY,EACZC,kBAAkB,EAClBC,sBAAsB,EACtBC,sBAAsB,EACtBC,2CAA2C,EAC3CC,0CAA0C,EACN,GAAA;AACpC,IAAA,MAAMC,yBAAyBC,gBAAAA,CAAMC,WAAW,CAC9C,CAACC,QAAgBC,OAAAA,EAAyBC,KAAAA,GAAAA;AACxC,QAAA,IAAIb,oBAAoBc,SAAAA,EAAW;YACjC,OAAO,IAAA;AACT,QAAA;AAEA,QAAA,MAAMC,kBAAAA,GAAqBf,eAAAA,CAAgBgB,IAAI,CAC7C,CAACC,IAAAA,GAASA,IAAAA,CAAKN,MAAM,KAAKA,MAAAA,IAAUM,IAAAA,CAAKL,OAAO,KAAKA,OAAAA,CAAAA;AAGvD,QAAA,IAAIG,uBAAuBD,SAAAA,EAAW;YACpC,OAAO,KAAA;AACT,QAAA;AAEA,QAAA,IAAID,UAAUC,SAAAA,EAAW;YACvB,OAAO,IAAA;AACT,QAAA;QAEA,MAAMI,MAAAA,GAASH,kBAAAA,CAAmBI,UAAU,EAAED,MAAAA;QAE9C,IAAIA,MAAAA,KAAW,IAAA,IAAQA,MAAAA,KAAWJ,SAAAA,EAAW;YAC3C,OAAO,IAAA;AACT,QAAA;QAEA,IAAIM,KAAAA,CAAMC,OAAO,CAACH,MAAAA,CAAAA,KAAY,SAASA,MAAAA,CAAOI,MAAM,KAAK,CAAA,EAAG;YAC1D,OAAO,KAAA;AACT,QAAA;AAEA,QAAA,OAAOJ,MAAAA,CAAOK,IAAI,CAChB,CAACC,YAAAA,GAAiBA,YAAAA,KAAiBX,KAAAA,IAASA,KAAAA,CAAMY,UAAU,CAAC,CAAA,EAAGD,YAAAA,CAAa,CAAC,CAAC,CAAA,CAAA;IAEnF,CAAA,EACA;AAACxB,QAAAA;AAAgB,KAAA,CAAA;AAGnB,IAAA,qBACE0B,cAAA,CAAChC,iCAAAA,EAAAA;QACCO,mBAAAA,EAAqBA,mBAAAA;QACrBC,YAAAA,EAAcA,YAAAA;QACdC,kBAAAA,EAAoBA,kBAAAA;QACpBC,sBAAAA,EAAwBA,sBAAAA;QACxBC,sBAAAA,EAAwBA,sBAAAA;QACxBC,2CAAAA,EAA6CA,2CAAAA;QAC7CC,0CAAAA,EAA4CA,0CAAAA;QAC5CP,eAAAA,EAAiBA,eAAAA;QACjBQ,sBAAAA,EAAwBA,sBAAAA;AAEvBT,QAAAA,QAAAA,EAAAA;;AAGP;;;;;"}
@@ -1,7 +1,46 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import * as React from 'react';
1
3
  import { createContext } from '@radix-ui/react-context';
2
4
 
3
- const [PermissionsDataManagerProvider, usePermissionsDataManagerContext] = createContext('PermissionsDataManager');
5
+ // eslint-disable-next-line check-file/filename-naming-convention
6
+ const [PermissionsDataManagerProviderRaw, usePermissionsDataManagerContext] = createContext('PermissionsDataManager');
4
7
  const usePermissionsDataManager = ()=>usePermissionsDataManagerContext('usePermissionsDataManager');
8
+ const PermissionsDataManagerProvider = ({ children, userPermissions, availableConditions, modifiedData, onChangeConditions, onChangeSimpleCheckbox, onChangeParentCheckbox, onChangeCollectionTypeLeftActionRowCheckbox, onChangeCollectionTypeGlobalActionCheckbox })=>{
9
+ const checkUserHasPermission = React.useCallback((action, subject, field)=>{
10
+ if (userPermissions === undefined) {
11
+ return true;
12
+ }
13
+ const matchingPermission = userPermissions.find((perm)=>perm.action === action && perm.subject === subject);
14
+ if (matchingPermission === undefined) {
15
+ return false;
16
+ }
17
+ if (field === undefined) {
18
+ return true;
19
+ }
20
+ const fields = matchingPermission.properties?.fields;
21
+ if (fields === null || fields === undefined) {
22
+ return true;
23
+ }
24
+ if (Array.isArray(fields) === false || fields.length === 0) {
25
+ return false;
26
+ }
27
+ return fields.some((allowedField)=>allowedField === field || field.startsWith(`${allowedField}.`));
28
+ }, [
29
+ userPermissions
30
+ ]);
31
+ return /*#__PURE__*/ jsx(PermissionsDataManagerProviderRaw, {
32
+ availableConditions: availableConditions,
33
+ modifiedData: modifiedData,
34
+ onChangeConditions: onChangeConditions,
35
+ onChangeSimpleCheckbox: onChangeSimpleCheckbox,
36
+ onChangeParentCheckbox: onChangeParentCheckbox,
37
+ onChangeCollectionTypeLeftActionRowCheckbox: onChangeCollectionTypeLeftActionRowCheckbox,
38
+ onChangeCollectionTypeGlobalActionCheckbox: onChangeCollectionTypeGlobalActionCheckbox,
39
+ userPermissions: userPermissions,
40
+ checkUserHasPermission: checkUserHasPermission,
41
+ children: children
42
+ });
43
+ };
5
44
 
6
45
  export { PermissionsDataManagerProvider, usePermissionsDataManager };
7
46
  //# sourceMappingURL=usePermissionsDataManager.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePermissionsDataManager.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.ts"],"sourcesContent":["import { createContext } from '@radix-ui/react-context';\n\nimport { Condition } from '../../../../../../../shared/contracts/permissions';\n\nimport type {\n OnChangeCollectionTypeGlobalActionCheckboxAction,\n OnChangeCollectionTypeRowLeftCheckboxAction,\n OnChangeConditionsAction,\n State,\n} from '../components/Permissions';\n\n// Note: I had to guess most of these types based on the name and usage, but I actually don't\n// know if they are correct, because the usage is very generic. Feel free to correct them if\n// they create problems.\nexport interface PermissionsDataManagerContextValue extends Pick<State, 'modifiedData'> {\n availableConditions: Condition[];\n onChangeCollectionTypeLeftActionRowCheckbox: (\n pathToCollectionType: OnChangeCollectionTypeRowLeftCheckboxAction['pathToCollectionType'],\n propertyName: OnChangeCollectionTypeRowLeftCheckboxAction['propertyName'],\n rowName: OnChangeCollectionTypeRowLeftCheckboxAction['rowName'],\n value: OnChangeCollectionTypeRowLeftCheckboxAction['value']\n ) => void;\n onChangeConditions: (conditions: OnChangeConditionsAction['conditions']) => void;\n onChangeSimpleCheckbox: (event: { target: { name: string; value: boolean } }) => void;\n onChangeParentCheckbox: (event: { target: { name: string; value: boolean } }) => void;\n onChangeCollectionTypeGlobalActionCheckbox: (\n collectionTypeKind: OnChangeCollectionTypeGlobalActionCheckboxAction['collectionTypeKind'],\n actionId: OnChangeCollectionTypeGlobalActionCheckboxAction['actionId'],\n value: OnChangeCollectionTypeGlobalActionCheckboxAction['value']\n ) => void;\n}\n\nconst [PermissionsDataManagerProvider, usePermissionsDataManagerContext] =\n createContext<PermissionsDataManagerContextValue>('PermissionsDataManager');\n\nexport const usePermissionsDataManager = () =>\n usePermissionsDataManagerContext('usePermissionsDataManager');\n\nexport { PermissionsDataManagerProvider };\n"],"names":["PermissionsDataManagerProvider","usePermissionsDataManagerContext","createContext","usePermissionsDataManager"],"mappings":";;AAgCA,MAAM,CAACA,8BAAAA,EAAgCC,gCAAAA,CAAiC,GACtEC,aAAAA,CAAkD,wBAAA;AAE7C,MAAMC,yBAAAA,GAA4B,IACvCF,gCAAAA,CAAiC,2BAAA;;;;"}
1
+ {"version":3,"file":"usePermissionsDataManager.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.tsx"],"sourcesContent":["// eslint-disable-next-line check-file/filename-naming-convention\nimport * as React from 'react';\n\nimport { createContext } from '@radix-ui/react-context';\n\nimport { Condition } from '../../../../../../../shared/contracts/permissions';\nimport { Permission as AuthPermission } from '../../../../../features/Auth';\n\nimport type {\n OnChangeCollectionTypeGlobalActionCheckboxAction,\n OnChangeCollectionTypeRowLeftCheckboxAction,\n OnChangeConditionsAction,\n State,\n} from '../components/Permissions';\n\n// Note: I had to guess most of these types based on the name and usage, but I actually don't\n// know if they are correct, because the usage is very generic. Feel free to correct them if\n// they create problems.\nexport interface PermissionsDataManagerContextValue extends Pick<State, 'modifiedData'> {\n availableConditions: Condition[];\n onChangeCollectionTypeLeftActionRowCheckbox: (\n pathToCollectionType: OnChangeCollectionTypeRowLeftCheckboxAction['pathToCollectionType'],\n propertyName: OnChangeCollectionTypeRowLeftCheckboxAction['propertyName'],\n rowName: OnChangeCollectionTypeRowLeftCheckboxAction['rowName'],\n value: OnChangeCollectionTypeRowLeftCheckboxAction['value']\n ) => void;\n onChangeConditions: (conditions: OnChangeConditionsAction['conditions']) => void;\n onChangeSimpleCheckbox: (event: { target: { name: string; value: boolean } }) => void;\n onChangeParentCheckbox: (event: { target: { name: string; value: boolean } }) => void;\n onChangeCollectionTypeGlobalActionCheckbox: (\n collectionTypeKind: OnChangeCollectionTypeGlobalActionCheckboxAction['collectionTypeKind'],\n actionId: OnChangeCollectionTypeGlobalActionCheckboxAction['actionId'],\n value: OnChangeCollectionTypeGlobalActionCheckboxAction['value']\n ) => void;\n userPermissions?: AuthPermission[];\n checkUserHasPermission: (action: string, subject?: string | null, field?: string) => boolean;\n}\n\nconst [PermissionsDataManagerProviderRaw, usePermissionsDataManagerContext] =\n createContext<PermissionsDataManagerContextValue>('PermissionsDataManager');\n\nexport const usePermissionsDataManager = () =>\n usePermissionsDataManagerContext('usePermissionsDataManager');\n\ninterface PermissionsDataManagerProviderProps\n extends Omit<PermissionsDataManagerContextValue, 'checkUserHasPermission'> {\n children: React.ReactNode;\n}\n\nconst PermissionsDataManagerProvider = ({\n children,\n userPermissions,\n availableConditions,\n modifiedData,\n onChangeConditions,\n onChangeSimpleCheckbox,\n onChangeParentCheckbox,\n onChangeCollectionTypeLeftActionRowCheckbox,\n onChangeCollectionTypeGlobalActionCheckbox,\n}: PermissionsDataManagerProviderProps) => {\n const checkUserHasPermission = React.useCallback(\n (action: string, subject?: string | null, field?: string): boolean => {\n if (userPermissions === undefined) {\n return true;\n }\n\n const matchingPermission = userPermissions.find(\n (perm) => perm.action === action && perm.subject === subject\n );\n\n if (matchingPermission === undefined) {\n return false;\n }\n\n if (field === undefined) {\n return true;\n }\n\n const fields = matchingPermission.properties?.fields;\n\n if (fields === null || fields === undefined) {\n return true;\n }\n\n if (Array.isArray(fields) === false || fields.length === 0) {\n return false;\n }\n\n return fields.some(\n (allowedField) => allowedField === field || field.startsWith(`${allowedField}.`)\n );\n },\n [userPermissions]\n );\n\n return (\n <PermissionsDataManagerProviderRaw\n availableConditions={availableConditions}\n modifiedData={modifiedData}\n onChangeConditions={onChangeConditions}\n onChangeSimpleCheckbox={onChangeSimpleCheckbox}\n onChangeParentCheckbox={onChangeParentCheckbox}\n onChangeCollectionTypeLeftActionRowCheckbox={onChangeCollectionTypeLeftActionRowCheckbox}\n onChangeCollectionTypeGlobalActionCheckbox={onChangeCollectionTypeGlobalActionCheckbox}\n userPermissions={userPermissions}\n checkUserHasPermission={checkUserHasPermission}\n >\n {children}\n </PermissionsDataManagerProviderRaw>\n );\n};\n\nexport { PermissionsDataManagerProvider };\n"],"names":["PermissionsDataManagerProviderRaw","usePermissionsDataManagerContext","createContext","usePermissionsDataManager","PermissionsDataManagerProvider","children","userPermissions","availableConditions","modifiedData","onChangeConditions","onChangeSimpleCheckbox","onChangeParentCheckbox","onChangeCollectionTypeLeftActionRowCheckbox","onChangeCollectionTypeGlobalActionCheckbox","checkUserHasPermission","React","useCallback","action","subject","field","undefined","matchingPermission","find","perm","fields","properties","Array","isArray","length","some","allowedField","startsWith","_jsx"],"mappings":";;;;AAAA;AAsCA,MAAM,CAACA,iCAAAA,EAAmCC,gCAAAA,CAAiC,GACzEC,aAAAA,CAAkD,wBAAA,CAAA;AAE7C,MAAMC,yBAAAA,GAA4B,IACvCF,gCAAAA,CAAiC,2BAAA;AAOnC,MAAMG,8BAAAA,GAAiC,CAAC,EACtCC,QAAQ,EACRC,eAAe,EACfC,mBAAmB,EACnBC,YAAY,EACZC,kBAAkB,EAClBC,sBAAsB,EACtBC,sBAAsB,EACtBC,2CAA2C,EAC3CC,0CAA0C,EACN,GAAA;AACpC,IAAA,MAAMC,yBAAyBC,KAAAA,CAAMC,WAAW,CAC9C,CAACC,QAAgBC,OAAAA,EAAyBC,KAAAA,GAAAA;AACxC,QAAA,IAAIb,oBAAoBc,SAAAA,EAAW;YACjC,OAAO,IAAA;AACT,QAAA;AAEA,QAAA,MAAMC,kBAAAA,GAAqBf,eAAAA,CAAgBgB,IAAI,CAC7C,CAACC,IAAAA,GAASA,IAAAA,CAAKN,MAAM,KAAKA,MAAAA,IAAUM,IAAAA,CAAKL,OAAO,KAAKA,OAAAA,CAAAA;AAGvD,QAAA,IAAIG,uBAAuBD,SAAAA,EAAW;YACpC,OAAO,KAAA;AACT,QAAA;AAEA,QAAA,IAAID,UAAUC,SAAAA,EAAW;YACvB,OAAO,IAAA;AACT,QAAA;QAEA,MAAMI,MAAAA,GAASH,kBAAAA,CAAmBI,UAAU,EAAED,MAAAA;QAE9C,IAAIA,MAAAA,KAAW,IAAA,IAAQA,MAAAA,KAAWJ,SAAAA,EAAW;YAC3C,OAAO,IAAA;AACT,QAAA;QAEA,IAAIM,KAAAA,CAAMC,OAAO,CAACH,MAAAA,CAAAA,KAAY,SAASA,MAAAA,CAAOI,MAAM,KAAK,CAAA,EAAG;YAC1D,OAAO,KAAA;AACT,QAAA;AAEA,QAAA,OAAOJ,MAAAA,CAAOK,IAAI,CAChB,CAACC,YAAAA,GAAiBA,YAAAA,KAAiBX,KAAAA,IAASA,KAAAA,CAAMY,UAAU,CAAC,CAAA,EAAGD,YAAAA,CAAa,CAAC,CAAC,CAAA,CAAA;IAEnF,CAAA,EACA;AAACxB,QAAAA;AAAgB,KAAA,CAAA;AAGnB,IAAA,qBACE0B,GAAA,CAAChC,iCAAAA,EAAAA;QACCO,mBAAAA,EAAqBA,mBAAAA;QACrBC,YAAAA,EAAcA,YAAAA;QACdC,kBAAAA,EAAoBA,kBAAAA;QACpBC,sBAAAA,EAAwBA,sBAAAA;QACxBC,sBAAAA,EAAwBA,sBAAAA;QACxBC,2CAAAA,EAA6CA,2CAAAA;QAC7CC,0CAAAA,EAA4CA,0CAAAA;QAC5CP,eAAAA,EAAiBA,eAAAA;QACjBQ,sBAAAA,EAAwBA,sBAAAA;AAEvBT,QAAAA,QAAAA,EAAAA;;AAGP;;;;"}
@@ -0,0 +1,89 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Utility functions for creating permission checkers used in bulk update operations.
5
+ * These functions encapsulate the logic for validating whether a user has permission
6
+ * to modify specific fields/actions during role and app token editing.
7
+ */ /**
8
+ * Creates a permission checker function for field-level permission validation.
9
+ * Used in bulk update operations to filter which leaves can be modified.
10
+ *
11
+ * @param actionId - The action to check (e.g., 'plugin::content-manager.explorer.create')
12
+ * @param subject - The subject to check (e.g., 'api::article.article'), or null for plugins/settings
13
+ * @param userPermissions - Array of user permissions, or undefined for Role editing mode
14
+ * @returns A checker function that validates if a given path should be allowed,
15
+ * or undefined if in Role editing mode (no restrictions)
16
+ */ const createFieldPermissionChecker = (actionId, subject, userPermissions)=>{
17
+ if (userPermissions === undefined) {
18
+ return undefined;
19
+ }
20
+ return (path)=>{
21
+ const matchingPerm = userPermissions.find((perm)=>perm.action === actionId && perm.subject === subject);
22
+ if (matchingPerm === undefined) {
23
+ return false;
24
+ }
25
+ const fieldsIndex = path.indexOf('fields');
26
+ if (fieldsIndex === -1 || fieldsIndex >= path.length - 1) {
27
+ return true;
28
+ }
29
+ const fieldPath = path.slice(fieldsIndex + 1).join('.');
30
+ const fields = matchingPerm.properties?.fields;
31
+ if (fields === null || fields === undefined) {
32
+ return true;
33
+ }
34
+ if (Array.isArray(fields) && fields.length === 0) {
35
+ return false;
36
+ }
37
+ if (Array.isArray(fields)) {
38
+ return fields.some((allowedField)=>fieldPath === allowedField || fieldPath.startsWith(`${allowedField}.`));
39
+ }
40
+ return false;
41
+ };
42
+ };
43
+ /**
44
+ * Creates a permission checker for content type operations where the action ID
45
+ * may need to be extracted from the path itself (for content type name checkboxes).
46
+ *
47
+ * @param subject - The subject to check
48
+ * @param actionIdFromContext - The action ID from parent context (may be undefined)
49
+ * @param userPermissions - Array of user permissions, or undefined for Role editing mode
50
+ * @returns A checker function or undefined if in Role editing mode
51
+ */ const createDynamicActionPermissionChecker = (subject, actionIdFromContext, userPermissions)=>{
52
+ if (userPermissions === undefined || subject === undefined) {
53
+ return undefined;
54
+ }
55
+ return (path)=>{
56
+ let currentActionId = actionIdFromContext;
57
+ let adjustedPath = path;
58
+ if (currentActionId === undefined && path.length > 0) {
59
+ if (path[0].includes('plugin::') || path[0].includes('admin::')) {
60
+ currentActionId = path[0];
61
+ adjustedPath = path.slice(1);
62
+ }
63
+ }
64
+ if (currentActionId === undefined) {
65
+ return false;
66
+ }
67
+ const matchingPerm = userPermissions.find((perm)=>perm.action === currentActionId && perm.subject === subject);
68
+ if (matchingPerm === undefined) {
69
+ return false;
70
+ }
71
+ const fieldsIndex = adjustedPath.indexOf('fields');
72
+ if (fieldsIndex !== -1 && fieldsIndex < adjustedPath.length - 1) {
73
+ const fieldPath = adjustedPath.slice(fieldsIndex + 1).join('.');
74
+ const fields = matchingPerm.properties?.fields;
75
+ if (fields === null || fields === undefined) {
76
+ return true;
77
+ }
78
+ if (Array.isArray(fields) && fields.length === 0) {
79
+ return false;
80
+ }
81
+ return Array.isArray(fields) && fields.some((f)=>fieldPath === f || fieldPath.startsWith(`${f}.`));
82
+ }
83
+ return true;
84
+ };
85
+ };
86
+
87
+ exports.createDynamicActionPermissionChecker = createDynamicActionPermissionChecker;
88
+ exports.createFieldPermissionChecker = createFieldPermissionChecker;
89
+ //# sourceMappingURL=createPermissionChecker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createPermissionChecker.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/utils/createPermissionChecker.ts"],"sourcesContent":["/**\n * Utility functions for creating permission checkers used in bulk update operations.\n * These functions encapsulate the logic for validating whether a user has permission\n * to modify specific fields/actions during role and app token editing.\n */\n\nimport type { Permission as AuthPermission } from '../../../../../features/Auth';\n\n/**\n * Creates a permission checker function for field-level permission validation.\n * Used in bulk update operations to filter which leaves can be modified.\n *\n * @param actionId - The action to check (e.g., 'plugin::content-manager.explorer.create')\n * @param subject - The subject to check (e.g., 'api::article.article'), or null for plugins/settings\n * @param userPermissions - Array of user permissions, or undefined for Role editing mode\n * @returns A checker function that validates if a given path should be allowed,\n * or undefined if in Role editing mode (no restrictions)\n */\nexport const createFieldPermissionChecker = (\n actionId: string,\n subject: string | null,\n userPermissions: AuthPermission[] | undefined\n): ((path: string[]) => boolean) | undefined => {\n if (userPermissions === undefined) {\n return undefined;\n }\n\n return (path: string[]) => {\n const matchingPerm = userPermissions.find(\n (perm) => perm.action === actionId && perm.subject === subject\n );\n\n if (matchingPerm === undefined) {\n return false;\n }\n\n const fieldsIndex = path.indexOf('fields');\n\n if (fieldsIndex === -1 || fieldsIndex >= path.length - 1) {\n return true;\n }\n\n const fieldPath = path.slice(fieldsIndex + 1).join('.');\n const fields = matchingPerm.properties?.fields;\n\n if (fields === null || fields === undefined) {\n return true;\n }\n\n if (Array.isArray(fields) && fields.length === 0) {\n return false;\n }\n\n if (Array.isArray(fields)) {\n return fields.some(\n (allowedField) => fieldPath === allowedField || fieldPath.startsWith(`${allowedField}.`)\n );\n }\n\n return false;\n };\n};\n\n/**\n * Creates a permission checker for content type operations where the action ID\n * may need to be extracted from the path itself (for content type name checkboxes).\n *\n * @param subject - The subject to check\n * @param actionIdFromContext - The action ID from parent context (may be undefined)\n * @param userPermissions - Array of user permissions, or undefined for Role editing mode\n * @returns A checker function or undefined if in Role editing mode\n */\nexport const createDynamicActionPermissionChecker = (\n subject: string | null | undefined,\n actionIdFromContext: string | undefined,\n userPermissions: AuthPermission[] | undefined\n): ((path: string[]) => boolean) | undefined => {\n if (userPermissions === undefined || subject === undefined) {\n return undefined;\n }\n\n return (path: string[]) => {\n let currentActionId = actionIdFromContext;\n let adjustedPath = path;\n\n if (currentActionId === undefined && path.length > 0) {\n if (path[0].includes('plugin::') || path[0].includes('admin::')) {\n currentActionId = path[0];\n adjustedPath = path.slice(1);\n }\n }\n\n if (currentActionId === undefined) {\n return false;\n }\n\n const matchingPerm = userPermissions.find(\n (perm) => perm.action === currentActionId && perm.subject === subject\n );\n\n if (matchingPerm === undefined) {\n return false;\n }\n\n const fieldsIndex = adjustedPath.indexOf('fields');\n\n if (fieldsIndex !== -1 && fieldsIndex < adjustedPath.length - 1) {\n const fieldPath = adjustedPath.slice(fieldsIndex + 1).join('.');\n const fields = matchingPerm.properties?.fields;\n\n if (fields === null || fields === undefined) {\n return true;\n }\n\n if (Array.isArray(fields) && fields.length === 0) {\n return false;\n }\n\n return (\n Array.isArray(fields) &&\n fields.some((f) => fieldPath === f || fieldPath.startsWith(`${f}.`))\n );\n }\n\n return true;\n };\n};\n"],"names":["createFieldPermissionChecker","actionId","subject","userPermissions","undefined","path","matchingPerm","find","perm","action","fieldsIndex","indexOf","length","fieldPath","slice","join","fields","properties","Array","isArray","some","allowedField","startsWith","createDynamicActionPermissionChecker","actionIdFromContext","currentActionId","adjustedPath","includes","f"],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Utility functions for creating permission checkers used in bulk update operations.
3
+ * These functions encapsulate the logic for validating whether a user has permission
4
+ * to modify specific fields/actions during role and app token editing.
5
+ */ /**
6
+ * Creates a permission checker function for field-level permission validation.
7
+ * Used in bulk update operations to filter which leaves can be modified.
8
+ *
9
+ * @param actionId - The action to check (e.g., 'plugin::content-manager.explorer.create')
10
+ * @param subject - The subject to check (e.g., 'api::article.article'), or null for plugins/settings
11
+ * @param userPermissions - Array of user permissions, or undefined for Role editing mode
12
+ * @returns A checker function that validates if a given path should be allowed,
13
+ * or undefined if in Role editing mode (no restrictions)
14
+ */ const createFieldPermissionChecker = (actionId, subject, userPermissions)=>{
15
+ if (userPermissions === undefined) {
16
+ return undefined;
17
+ }
18
+ return (path)=>{
19
+ const matchingPerm = userPermissions.find((perm)=>perm.action === actionId && perm.subject === subject);
20
+ if (matchingPerm === undefined) {
21
+ return false;
22
+ }
23
+ const fieldsIndex = path.indexOf('fields');
24
+ if (fieldsIndex === -1 || fieldsIndex >= path.length - 1) {
25
+ return true;
26
+ }
27
+ const fieldPath = path.slice(fieldsIndex + 1).join('.');
28
+ const fields = matchingPerm.properties?.fields;
29
+ if (fields === null || fields === undefined) {
30
+ return true;
31
+ }
32
+ if (Array.isArray(fields) && fields.length === 0) {
33
+ return false;
34
+ }
35
+ if (Array.isArray(fields)) {
36
+ return fields.some((allowedField)=>fieldPath === allowedField || fieldPath.startsWith(`${allowedField}.`));
37
+ }
38
+ return false;
39
+ };
40
+ };
41
+ /**
42
+ * Creates a permission checker for content type operations where the action ID
43
+ * may need to be extracted from the path itself (for content type name checkboxes).
44
+ *
45
+ * @param subject - The subject to check
46
+ * @param actionIdFromContext - The action ID from parent context (may be undefined)
47
+ * @param userPermissions - Array of user permissions, or undefined for Role editing mode
48
+ * @returns A checker function or undefined if in Role editing mode
49
+ */ const createDynamicActionPermissionChecker = (subject, actionIdFromContext, userPermissions)=>{
50
+ if (userPermissions === undefined || subject === undefined) {
51
+ return undefined;
52
+ }
53
+ return (path)=>{
54
+ let currentActionId = actionIdFromContext;
55
+ let adjustedPath = path;
56
+ if (currentActionId === undefined && path.length > 0) {
57
+ if (path[0].includes('plugin::') || path[0].includes('admin::')) {
58
+ currentActionId = path[0];
59
+ adjustedPath = path.slice(1);
60
+ }
61
+ }
62
+ if (currentActionId === undefined) {
63
+ return false;
64
+ }
65
+ const matchingPerm = userPermissions.find((perm)=>perm.action === currentActionId && perm.subject === subject);
66
+ if (matchingPerm === undefined) {
67
+ return false;
68
+ }
69
+ const fieldsIndex = adjustedPath.indexOf('fields');
70
+ if (fieldsIndex !== -1 && fieldsIndex < adjustedPath.length - 1) {
71
+ const fieldPath = adjustedPath.slice(fieldsIndex + 1).join('.');
72
+ const fields = matchingPerm.properties?.fields;
73
+ if (fields === null || fields === undefined) {
74
+ return true;
75
+ }
76
+ if (Array.isArray(fields) && fields.length === 0) {
77
+ return false;
78
+ }
79
+ return Array.isArray(fields) && fields.some((f)=>fieldPath === f || fieldPath.startsWith(`${f}.`));
80
+ }
81
+ return true;
82
+ };
83
+ };
84
+
85
+ export { createDynamicActionPermissionChecker, createFieldPermissionChecker };
86
+ //# sourceMappingURL=createPermissionChecker.mjs.map