@abhi1693/medusa-rbac 0.0.1 → 0.0.2

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 (35) hide show
  1. package/.medusa/server/src/admin/index.js +43 -25
  2. package/.medusa/server/src/admin/index.mjs +43 -25
  3. package/.medusa/server/src/admin/lib/access.d.ts +6 -3
  4. package/.medusa/server/src/admin/lib/access.js +1 -1
  5. package/.medusa/server/src/api/admin/access/me/route.js +3 -1
  6. package/.medusa/server/src/api/admin/access/permissions/route.js +4 -1
  7. package/.medusa/server/src/api/middlewares/enforce-admin-access.js +49 -61
  8. package/.medusa/server/src/index.d.ts +1 -0
  9. package/.medusa/server/src/index.js +2 -1
  10. package/.medusa/server/src/lib/access/config.d.ts +6 -0
  11. package/.medusa/server/src/lib/access/config.js +110 -14
  12. package/.medusa/server/src/lib/access/explain.d.ts +1 -1
  13. package/.medusa/server/src/lib/access/explain.js +3 -2
  14. package/.medusa/server/src/lib/access/immutable-config.d.ts +2 -0
  15. package/.medusa/server/src/lib/access/immutable-config.js +17 -0
  16. package/.medusa/server/src/lib/access/native-resources.d.ts +3 -0
  17. package/.medusa/server/src/lib/access/native-resources.js +444 -0
  18. package/.medusa/server/src/lib/access/permission-key.d.ts +1 -1
  19. package/.medusa/server/src/lib/access/permission-key.js +3 -2
  20. package/.medusa/server/src/lib/access/permissions.d.ts +7 -0
  21. package/.medusa/server/src/lib/access/permissions.js +15 -2
  22. package/.medusa/server/src/lib/access/policy.d.ts +12 -3
  23. package/.medusa/server/src/lib/access/policy.js +149 -264
  24. package/.medusa/server/src/lib/access/resources.d.ts +107 -0
  25. package/.medusa/server/src/lib/access/resources.js +363 -0
  26. package/.medusa/server/src/lib/access/route-facts.d.ts +24 -0
  27. package/.medusa/server/src/lib/access/route-facts.js +77 -0
  28. package/.medusa/server/src/lib/access/write-permissions.d.ts +2 -0
  29. package/.medusa/server/src/lib/access/write-permissions.js +40 -0
  30. package/.medusa/server/src/modules/access-control/service.d.ts +4 -0
  31. package/.medusa/server/src/modules/access-control/service.js +8 -3
  32. package/.medusa/server/src/resources.d.ts +2 -0
  33. package/.medusa/server/src/resources.js +18 -0
  34. package/README.md +71 -9
  35. package/package.json +11 -7
@@ -696,13 +696,13 @@ function ActorPicker({
696
696
  }
697
697
  const reasons = {
698
698
  inactive: "This account has no active access.",
699
- superuser: "Superuser grants every registered permission.",
700
699
  no_match: "No grant or contextual rule matches this permission and context.",
701
700
  allow: "The highest-ranked matching rule allows this permission.",
702
701
  deny: "The highest-ranked matching rule denies this permission."
703
702
  };
704
703
  function PermissionChecker({
705
704
  permission,
705
+ superuserAuthority,
706
706
  actorTypes,
707
707
  userId,
708
708
  onClose
@@ -835,7 +835,7 @@ function PermissionChecker({
835
835
  className: "bg-ui-bg-subtle border-ui-border-base rounded-lg border p-4",
836
836
  children: [
837
837
  /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: check.data.decision.allowed ? "green" : "red", children: check.data.decision.allowed ? "Allowed" : "Denied" }),
838
- /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "mt-3", children: reasons[check.data.decision.reason] }),
838
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "mt-3", children: check.data.decision.reason === "superuser" ? superuserAuthority.description : reasons[check.data.decision.reason] }),
839
839
  check.data.decision.matches.map((rule, index) => /* @__PURE__ */ jsxRuntime.jsxs(
840
840
  "div",
841
841
  {
@@ -881,7 +881,7 @@ function PermissionCatalog({
881
881
  const [search, setSearch] = react.useState("");
882
882
  const [pagination, setPagination] = react.useState({ pageIndex: 0, pageSize: 25 });
883
883
  const [selected, setSelected] = react.useState(null);
884
- const catalog2 = reactQuery.useQuery({
884
+ const catalog = reactQuery.useQuery({
885
885
  queryKey: ["medusa-rbac", userId, "permissions"],
886
886
  queryFn: accessApi.permissions,
887
887
  retry: false
@@ -918,7 +918,7 @@ function PermissionCatalog({
918
918
  ],
919
919
  [superuser]
920
920
  );
921
- const rows = (catalog2.data?.permissions || []).filter(
921
+ const rows = (catalog.data?.permissions || []).filter(
922
922
  (permission) => `${permission.id} ${permission.label} ${permission.group}`.toLowerCase().includes(search.trim().toLowerCase())
923
923
  );
924
924
  const table = ui.useDataTable({
@@ -929,7 +929,7 @@ function PermissionCatalog({
929
929
  columns: columns2,
930
930
  getRowId: (permission) => permission.id,
931
931
  rowCount: rows.length,
932
- isLoading: catalog2.isPending,
932
+ isLoading: catalog.isPending,
933
933
  search: {
934
934
  state: search,
935
935
  onSearchChange: (value) => {
@@ -941,13 +941,14 @@ function PermissionCatalog({
941
941
  });
942
942
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-y-3", children: [
943
943
  /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-subtle", children: "Permissions are registered by the plugin and your application. Use their identifiers in role definitions, rules and server checks." }),
944
+ superuser && catalog.data && /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-subtle", children: catalog.data.superuser_authority.description }),
944
945
  /* @__PURE__ */ jsxRuntime.jsx(
945
946
  SettingsTable,
946
947
  {
947
948
  title: "Permission catalog",
948
949
  instance: table,
949
950
  search: "Search permissions",
950
- error: catalog2.error,
951
+ error: catalog.error,
951
952
  empty: "No permissions registered"
952
953
  }
953
954
  ),
@@ -955,7 +956,8 @@ function PermissionCatalog({
955
956
  PermissionChecker,
956
957
  {
957
958
  permission: selected,
958
- actorTypes: catalog2.data?.actor_types || ["user", "customer"],
959
+ superuserAuthority: catalog.data.superuser_authority,
960
+ actorTypes: catalog.data?.actor_types || ["user", "customer"],
959
961
  userId,
960
962
  onClose: () => setSelected(null)
961
963
  }
@@ -2231,7 +2233,9 @@ const PERMISSIONS = [
2231
2233
  PERMISSIONS.map(
2232
2234
  ([id]) => id
2233
2235
  );
2234
- const catalog = PERMISSIONS.map(([id, label, group]) => ({ id, label, group }));
2236
+ function isSuperuser(principal) {
2237
+ return principal.actor_type === "user" && principal.active && principal.is_superuser;
2238
+ }
2235
2239
  const column = ui.createDataTableColumnHelper();
2236
2240
  const columns = [
2237
2241
  column.accessor("group", { header: "Area" }),
@@ -2240,12 +2244,13 @@ const columns = [
2240
2244
  function MyAccess({
2241
2245
  access,
2242
2246
  roles,
2243
- permissionCatalog = catalog
2247
+ permissionCatalog,
2248
+ superuserAuthority
2244
2249
  }) {
2245
2250
  const [search, setSearch] = react.useState("");
2246
2251
  const [pagination, setPagination] = react.useState({ pageIndex: 0, pageSize: 25 });
2247
2252
  const rows = permissionCatalog.filter(
2248
- (permission) => access.permissions.includes(permission.id) && `${permission.label} ${permission.group}`.toLowerCase().includes(search.trim().toLowerCase())
2253
+ (permission) => (isSuperuser(access) || access.permissions.includes(permission.id)) && `${permission.label} ${permission.group}`.toLowerCase().includes(search.trim().toLowerCase())
2249
2254
  );
2250
2255
  const table = ui.useDataTable({
2251
2256
  data: rows.slice(
@@ -2255,7 +2260,13 @@ function MyAccess({
2255
2260
  columns,
2256
2261
  getRowId: (permission) => permission.id,
2257
2262
  rowCount: rows.length,
2258
- search: { state: search, onSearchChange: setSearch },
2263
+ search: {
2264
+ state: search,
2265
+ onSearchChange: (value) => {
2266
+ setSearch(value);
2267
+ setPagination((current) => ({ ...current, pageIndex: 0 }));
2268
+ }
2269
+ },
2259
2270
  pagination: { state: pagination, onPaginationChange: setPagination }
2260
2271
  });
2261
2272
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-y-3", children: [
@@ -2266,7 +2277,11 @@ function MyAccess({
2266
2277
  /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "small", children: roles ? roles.map((role) => role.name).join(", ") || "No roles assigned" : "Roles unavailable" })
2267
2278
  ] })
2268
2279
  ] }),
2269
- Boolean(access.rules?.length) && /* @__PURE__ */ jsxRuntime.jsx(ui.Container, { children: /* @__PURE__ */ jsxRuntime.jsx(
2280
+ isSuperuser(access) && /* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { children: [
2281
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h2", children: "Full Admin access" }),
2282
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "small", className: "text-ui-fg-subtle mt-2", children: superuserAuthority.description })
2283
+ ] }),
2284
+ !isSuperuser(access) && Boolean(access.rules?.length) && /* @__PURE__ */ jsxRuntime.jsx(ui.Container, { children: /* @__PURE__ */ jsxRuntime.jsx(
2270
2285
  PermissionRules,
2271
2286
  {
2272
2287
  value: ruleDrafts(access.rules),
@@ -2278,7 +2293,7 @@ function MyAccess({
2278
2293
  /* @__PURE__ */ jsxRuntime.jsx(
2279
2294
  SettingsTable,
2280
2295
  {
2281
- title: "Permissions",
2296
+ title: isSuperuser(access) ? "All registered permissions" : "Explicit permission grants",
2282
2297
  headingLevel: "h2",
2283
2298
  instance: table,
2284
2299
  empty: "No permissions assigned",
@@ -2291,7 +2306,7 @@ function permissionKeyMatches(pattern, permission) {
2291
2306
  return pattern === permission || pattern === "*" || pattern.endsWith(".*") && permission.startsWith(pattern.slice(0, -1));
2292
2307
  }
2293
2308
  function hasPermissionCandidate(principal, permission) {
2294
- return principal.active && (principal.is_superuser || principal.permissions.includes(permission) || Boolean(
2309
+ return principal.active && (isSuperuser(principal) || principal.permissions.includes(permission) || Boolean(
2295
2310
  principal.rules?.some(
2296
2311
  (rule) => rule.effect === "allow" && permissionKeyMatches(rule.permission, permission)
2297
2312
  )
@@ -2354,7 +2369,8 @@ const AccessManagement = () => {
2354
2369
  {
2355
2370
  access,
2356
2371
  roles: query.data?.roles,
2357
- permissionCatalog: query.data?.permission_catalog
2372
+ permissionCatalog: query.data.permission_catalog,
2373
+ superuserAuthority: query.data.superuser_authority
2358
2374
  }
2359
2375
  ) })
2360
2376
  ]
@@ -2367,10 +2383,11 @@ function conditionValue(value) {
2367
2383
  }
2368
2384
  function PermissionSummary({
2369
2385
  role,
2370
- permissions
2386
+ permissions,
2387
+ superuserAuthority
2371
2388
  }) {
2372
2389
  const grants = permissions.filter(
2373
- (permission) => role.permissions.includes(permission.id)
2390
+ (permission) => role.is_superuser || role.permissions.includes(permission.id)
2374
2391
  );
2375
2392
  const groups = [...new Set(grants.map((permission) => permission.group))];
2376
2393
  return /* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { className: "divide-y p-0", children: [
@@ -2378,7 +2395,7 @@ function PermissionSummary({
2378
2395
  /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h2", children: "Permissions" }),
2379
2396
  /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { size: "2xsmall", children: role.is_superuser ? "All permissions" : `${grants.length} ${grants.length === 1 ? "grant" : "grants"}` })
2380
2397
  ] }),
2381
- role.is_superuser && /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "small", className: "text-ui-fg-subtle px-6 py-4", children: "Superuser has every registered permission, including permissions added later." }),
2398
+ role.is_superuser && /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "small", className: "text-ui-fg-subtle px-6 py-4", children: superuserAuthority.description }),
2382
2399
  groups.map((group) => /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "px-6 py-4", children: [
2383
2400
  /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h3", className: "mb-3", children: group }),
2384
2401
  /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "grid gap-3 sm:grid-cols-2", children: grants.filter((permission) => permission.group === group).map((permission) => /* @__PURE__ */ jsxRuntime.jsxs(
@@ -2393,7 +2410,7 @@ function PermissionSummary({
2393
2410
  permission.id
2394
2411
  )) })
2395
2412
  ] }, group)),
2396
- (role.rules || []).map((rule, index) => /* @__PURE__ */ jsxRuntime.jsx("section", { className: "px-6 py-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-ui-border-base overflow-hidden rounded-lg border", children: [
2413
+ (!role.is_superuser ? role.rules || [] : []).map((rule, index) => /* @__PURE__ */ jsxRuntime.jsx("section", { className: "px-6 py-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-ui-border-base overflow-hidden rounded-lg border", children: [
2397
2414
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2 px-4 py-3", children: [
2398
2415
  /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "small", weight: "plus", children: permissions.find(
2399
2416
  (permission) => permission.id === rule.permission
@@ -2446,15 +2463,15 @@ function RoleDetail({ roleId }) {
2446
2463
  enabled: allowed,
2447
2464
  retry: false
2448
2465
  });
2449
- const catalog2 = reactQuery.useQuery({
2466
+ const catalog = reactQuery.useQuery({
2450
2467
  queryKey: ["medusa-rbac", access?.actor_id, "permissions"],
2451
2468
  queryFn: accessApi.permissions,
2452
2469
  enabled: allowed,
2453
2470
  retry: false
2454
2471
  });
2455
2472
  const [editor, setEditor] = react.useState(null);
2456
- if (current.error || detail.error || catalog2.error)
2457
- return /* @__PURE__ */ jsxRuntime.jsx(ui.Alert, { role: "alert", variant: "error", children: errorMessage(current.error || detail.error || catalog2.error) });
2473
+ if (current.error || detail.error || catalog.error)
2474
+ return /* @__PURE__ */ jsxRuntime.jsx(ui.Alert, { role: "alert", variant: "error", children: errorMessage(current.error || detail.error || catalog.error) });
2458
2475
  if (current.isPending || !current.isFetchedAfterMount)
2459
2476
  return /* @__PURE__ */ jsxRuntime.jsx(ui.Container, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { role: "status", children: "Loading access…" }) });
2460
2477
  if (!allowed)
@@ -2463,7 +2480,7 @@ function RoleDetail({ roleId }) {
2463
2480
  /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-subtle", children: "You do not have permission to view this role." }),
2464
2481
  /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { asChild: true, variant: "secondary", size: "small", className: "mt-4", children: /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Link, { to: "/settings/access-management?view=my-access", children: "View my access" }) })
2465
2482
  ] });
2466
- if (detail.isPending || catalog2.isPending)
2483
+ if (detail.isPending || catalog.isPending)
2467
2484
  return /* @__PURE__ */ jsxRuntime.jsx(ui.Container, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { role: "status", children: "Loading role…" }) });
2468
2485
  const { role, actors, actor_count, pending_invitation_count } = detail.data;
2469
2486
  const managed = roleIsManaged(role);
@@ -2504,7 +2521,8 @@ function RoleDetail({ roleId }) {
2504
2521
  PermissionSummary,
2505
2522
  {
2506
2523
  role,
2507
- permissions: catalog2.data.permissions
2524
+ permissions: catalog.data.permissions,
2525
+ superuserAuthority: catalog.data.superuser_authority
2508
2526
  }
2509
2527
  ) }),
2510
2528
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-3", children: [
@@ -2621,7 +2639,7 @@ function RoleDetail({ roleId }) {
2621
2639
  open: true,
2622
2640
  role: editor.mode === "edit" ? editor.role : void 0,
2623
2641
  initialRole: editor.mode === "copy" ? editor.role : void 0,
2624
- permissions: catalog2.data.permissions,
2642
+ permissions: catalog.data.permissions,
2625
2643
  readOnly: !access.is_superuser || editor.mode === "edit" && managed,
2626
2644
  onClose: () => setEditor(null)
2627
2645
  },
@@ -693,13 +693,13 @@ function ActorPicker({
693
693
  }
694
694
  const reasons = {
695
695
  inactive: "This account has no active access.",
696
- superuser: "Superuser grants every registered permission.",
697
696
  no_match: "No grant or contextual rule matches this permission and context.",
698
697
  allow: "The highest-ranked matching rule allows this permission.",
699
698
  deny: "The highest-ranked matching rule denies this permission."
700
699
  };
701
700
  function PermissionChecker({
702
701
  permission,
702
+ superuserAuthority,
703
703
  actorTypes,
704
704
  userId,
705
705
  onClose
@@ -832,7 +832,7 @@ function PermissionChecker({
832
832
  className: "bg-ui-bg-subtle border-ui-border-base rounded-lg border p-4",
833
833
  children: [
834
834
  /* @__PURE__ */ jsx(Badge, { color: check.data.decision.allowed ? "green" : "red", children: check.data.decision.allowed ? "Allowed" : "Denied" }),
835
- /* @__PURE__ */ jsx(Text, { className: "mt-3", children: reasons[check.data.decision.reason] }),
835
+ /* @__PURE__ */ jsx(Text, { className: "mt-3", children: check.data.decision.reason === "superuser" ? superuserAuthority.description : reasons[check.data.decision.reason] }),
836
836
  check.data.decision.matches.map((rule, index) => /* @__PURE__ */ jsxs(
837
837
  "div",
838
838
  {
@@ -878,7 +878,7 @@ function PermissionCatalog({
878
878
  const [search, setSearch] = useState("");
879
879
  const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 25 });
880
880
  const [selected, setSelected] = useState(null);
881
- const catalog2 = useQuery({
881
+ const catalog = useQuery({
882
882
  queryKey: ["medusa-rbac", userId, "permissions"],
883
883
  queryFn: accessApi.permissions,
884
884
  retry: false
@@ -915,7 +915,7 @@ function PermissionCatalog({
915
915
  ],
916
916
  [superuser]
917
917
  );
918
- const rows = (catalog2.data?.permissions || []).filter(
918
+ const rows = (catalog.data?.permissions || []).filter(
919
919
  (permission) => `${permission.id} ${permission.label} ${permission.group}`.toLowerCase().includes(search.trim().toLowerCase())
920
920
  );
921
921
  const table = useDataTable({
@@ -926,7 +926,7 @@ function PermissionCatalog({
926
926
  columns: columns2,
927
927
  getRowId: (permission) => permission.id,
928
928
  rowCount: rows.length,
929
- isLoading: catalog2.isPending,
929
+ isLoading: catalog.isPending,
930
930
  search: {
931
931
  state: search,
932
932
  onSearchChange: (value) => {
@@ -938,13 +938,14 @@ function PermissionCatalog({
938
938
  });
939
939
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-3", children: [
940
940
  /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-subtle", children: "Permissions are registered by the plugin and your application. Use their identifiers in role definitions, rules and server checks." }),
941
+ superuser && catalog.data && /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-subtle", children: catalog.data.superuser_authority.description }),
941
942
  /* @__PURE__ */ jsx(
942
943
  SettingsTable,
943
944
  {
944
945
  title: "Permission catalog",
945
946
  instance: table,
946
947
  search: "Search permissions",
947
- error: catalog2.error,
948
+ error: catalog.error,
948
949
  empty: "No permissions registered"
949
950
  }
950
951
  ),
@@ -952,7 +953,8 @@ function PermissionCatalog({
952
953
  PermissionChecker,
953
954
  {
954
955
  permission: selected,
955
- actorTypes: catalog2.data?.actor_types || ["user", "customer"],
956
+ superuserAuthority: catalog.data.superuser_authority,
957
+ actorTypes: catalog.data?.actor_types || ["user", "customer"],
956
958
  userId,
957
959
  onClose: () => setSelected(null)
958
960
  }
@@ -2228,7 +2230,9 @@ const PERMISSIONS = [
2228
2230
  PERMISSIONS.map(
2229
2231
  ([id]) => id
2230
2232
  );
2231
- const catalog = PERMISSIONS.map(([id, label, group]) => ({ id, label, group }));
2233
+ function isSuperuser(principal) {
2234
+ return principal.actor_type === "user" && principal.active && principal.is_superuser;
2235
+ }
2232
2236
  const column = createDataTableColumnHelper();
2233
2237
  const columns = [
2234
2238
  column.accessor("group", { header: "Area" }),
@@ -2237,12 +2241,13 @@ const columns = [
2237
2241
  function MyAccess({
2238
2242
  access,
2239
2243
  roles,
2240
- permissionCatalog = catalog
2244
+ permissionCatalog,
2245
+ superuserAuthority
2241
2246
  }) {
2242
2247
  const [search, setSearch] = useState("");
2243
2248
  const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 25 });
2244
2249
  const rows = permissionCatalog.filter(
2245
- (permission) => access.permissions.includes(permission.id) && `${permission.label} ${permission.group}`.toLowerCase().includes(search.trim().toLowerCase())
2250
+ (permission) => (isSuperuser(access) || access.permissions.includes(permission.id)) && `${permission.label} ${permission.group}`.toLowerCase().includes(search.trim().toLowerCase())
2246
2251
  );
2247
2252
  const table = useDataTable({
2248
2253
  data: rows.slice(
@@ -2252,7 +2257,13 @@ function MyAccess({
2252
2257
  columns,
2253
2258
  getRowId: (permission) => permission.id,
2254
2259
  rowCount: rows.length,
2255
- search: { state: search, onSearchChange: setSearch },
2260
+ search: {
2261
+ state: search,
2262
+ onSearchChange: (value) => {
2263
+ setSearch(value);
2264
+ setPagination((current) => ({ ...current, pageIndex: 0 }));
2265
+ }
2266
+ },
2256
2267
  pagination: { state: pagination, onPaginationChange: setPagination }
2257
2268
  });
2258
2269
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-3", children: [
@@ -2263,7 +2274,11 @@ function MyAccess({
2263
2274
  /* @__PURE__ */ jsx(Text, { size: "small", children: roles ? roles.map((role) => role.name).join(", ") || "No roles assigned" : "Roles unavailable" })
2264
2275
  ] })
2265
2276
  ] }),
2266
- Boolean(access.rules?.length) && /* @__PURE__ */ jsx(Container, { children: /* @__PURE__ */ jsx(
2277
+ isSuperuser(access) && /* @__PURE__ */ jsxs(Container, { children: [
2278
+ /* @__PURE__ */ jsx(Heading, { level: "h2", children: "Full Admin access" }),
2279
+ /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle mt-2", children: superuserAuthority.description })
2280
+ ] }),
2281
+ !isSuperuser(access) && Boolean(access.rules?.length) && /* @__PURE__ */ jsx(Container, { children: /* @__PURE__ */ jsx(
2267
2282
  PermissionRules,
2268
2283
  {
2269
2284
  value: ruleDrafts(access.rules),
@@ -2275,7 +2290,7 @@ function MyAccess({
2275
2290
  /* @__PURE__ */ jsx(
2276
2291
  SettingsTable,
2277
2292
  {
2278
- title: "Permissions",
2293
+ title: isSuperuser(access) ? "All registered permissions" : "Explicit permission grants",
2279
2294
  headingLevel: "h2",
2280
2295
  instance: table,
2281
2296
  empty: "No permissions assigned",
@@ -2288,7 +2303,7 @@ function permissionKeyMatches(pattern, permission) {
2288
2303
  return pattern === permission || pattern === "*" || pattern.endsWith(".*") && permission.startsWith(pattern.slice(0, -1));
2289
2304
  }
2290
2305
  function hasPermissionCandidate(principal, permission) {
2291
- return principal.active && (principal.is_superuser || principal.permissions.includes(permission) || Boolean(
2306
+ return principal.active && (isSuperuser(principal) || principal.permissions.includes(permission) || Boolean(
2292
2307
  principal.rules?.some(
2293
2308
  (rule) => rule.effect === "allow" && permissionKeyMatches(rule.permission, permission)
2294
2309
  )
@@ -2351,7 +2366,8 @@ const AccessManagement = () => {
2351
2366
  {
2352
2367
  access,
2353
2368
  roles: query.data?.roles,
2354
- permissionCatalog: query.data?.permission_catalog
2369
+ permissionCatalog: query.data.permission_catalog,
2370
+ superuserAuthority: query.data.superuser_authority
2355
2371
  }
2356
2372
  ) })
2357
2373
  ]
@@ -2364,10 +2380,11 @@ function conditionValue(value) {
2364
2380
  }
2365
2381
  function PermissionSummary({
2366
2382
  role,
2367
- permissions
2383
+ permissions,
2384
+ superuserAuthority
2368
2385
  }) {
2369
2386
  const grants = permissions.filter(
2370
- (permission) => role.permissions.includes(permission.id)
2387
+ (permission) => role.is_superuser || role.permissions.includes(permission.id)
2371
2388
  );
2372
2389
  const groups = [...new Set(grants.map((permission) => permission.group))];
2373
2390
  return /* @__PURE__ */ jsxs(Container, { className: "divide-y p-0", children: [
@@ -2375,7 +2392,7 @@ function PermissionSummary({
2375
2392
  /* @__PURE__ */ jsx(Heading, { level: "h2", children: "Permissions" }),
2376
2393
  /* @__PURE__ */ jsx(Badge, { size: "2xsmall", children: role.is_superuser ? "All permissions" : `${grants.length} ${grants.length === 1 ? "grant" : "grants"}` })
2377
2394
  ] }),
2378
- role.is_superuser && /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle px-6 py-4", children: "Superuser has every registered permission, including permissions added later." }),
2395
+ role.is_superuser && /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle px-6 py-4", children: superuserAuthority.description }),
2379
2396
  groups.map((group) => /* @__PURE__ */ jsxs("section", { className: "px-6 py-4", children: [
2380
2397
  /* @__PURE__ */ jsx(Heading, { level: "h3", className: "mb-3", children: group }),
2381
2398
  /* @__PURE__ */ jsx("ul", { className: "grid gap-3 sm:grid-cols-2", children: grants.filter((permission) => permission.group === group).map((permission) => /* @__PURE__ */ jsxs(
@@ -2390,7 +2407,7 @@ function PermissionSummary({
2390
2407
  permission.id
2391
2408
  )) })
2392
2409
  ] }, group)),
2393
- (role.rules || []).map((rule, index) => /* @__PURE__ */ jsx("section", { className: "px-6 py-4", children: /* @__PURE__ */ jsxs("div", { className: "border-ui-border-base overflow-hidden rounded-lg border", children: [
2410
+ (!role.is_superuser ? role.rules || [] : []).map((rule, index) => /* @__PURE__ */ jsx("section", { className: "px-6 py-4", children: /* @__PURE__ */ jsxs("div", { className: "border-ui-border-base overflow-hidden rounded-lg border", children: [
2394
2411
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 px-4 py-3", children: [
2395
2412
  /* @__PURE__ */ jsx(Text, { size: "small", weight: "plus", children: permissions.find(
2396
2413
  (permission) => permission.id === rule.permission
@@ -2443,15 +2460,15 @@ function RoleDetail({ roleId }) {
2443
2460
  enabled: allowed,
2444
2461
  retry: false
2445
2462
  });
2446
- const catalog2 = useQuery({
2463
+ const catalog = useQuery({
2447
2464
  queryKey: ["medusa-rbac", access?.actor_id, "permissions"],
2448
2465
  queryFn: accessApi.permissions,
2449
2466
  enabled: allowed,
2450
2467
  retry: false
2451
2468
  });
2452
2469
  const [editor, setEditor] = useState(null);
2453
- if (current.error || detail.error || catalog2.error)
2454
- return /* @__PURE__ */ jsx(Alert, { role: "alert", variant: "error", children: errorMessage(current.error || detail.error || catalog2.error) });
2470
+ if (current.error || detail.error || catalog.error)
2471
+ return /* @__PURE__ */ jsx(Alert, { role: "alert", variant: "error", children: errorMessage(current.error || detail.error || catalog.error) });
2455
2472
  if (current.isPending || !current.isFetchedAfterMount)
2456
2473
  return /* @__PURE__ */ jsx(Container, { children: /* @__PURE__ */ jsx(Text, { role: "status", children: "Loading access…" }) });
2457
2474
  if (!allowed)
@@ -2460,7 +2477,7 @@ function RoleDetail({ roleId }) {
2460
2477
  /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-subtle", children: "You do not have permission to view this role." }),
2461
2478
  /* @__PURE__ */ jsx(Button, { asChild: true, variant: "secondary", size: "small", className: "mt-4", children: /* @__PURE__ */ jsx(Link, { to: "/settings/access-management?view=my-access", children: "View my access" }) })
2462
2479
  ] });
2463
- if (detail.isPending || catalog2.isPending)
2480
+ if (detail.isPending || catalog.isPending)
2464
2481
  return /* @__PURE__ */ jsx(Container, { children: /* @__PURE__ */ jsx(Text, { role: "status", children: "Loading role…" }) });
2465
2482
  const { role, actors, actor_count, pending_invitation_count } = detail.data;
2466
2483
  const managed = roleIsManaged(role);
@@ -2501,7 +2518,8 @@ function RoleDetail({ roleId }) {
2501
2518
  PermissionSummary,
2502
2519
  {
2503
2520
  role,
2504
- permissions: catalog2.data.permissions
2521
+ permissions: catalog.data.permissions,
2522
+ superuserAuthority: catalog.data.superuser_authority
2505
2523
  }
2506
2524
  ) }),
2507
2525
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", children: [
@@ -2618,7 +2636,7 @@ function RoleDetail({ roleId }) {
2618
2636
  open: true,
2619
2637
  role: editor.mode === "edit" ? editor.role : void 0,
2620
2638
  initialRole: editor.mode === "copy" ? editor.role : void 0,
2621
- permissions: catalog2.data.permissions,
2639
+ permissions: catalog.data.permissions,
2622
2640
  readOnly: !access.is_superuser || editor.mode === "edit" && managed,
2623
2641
  onClose: () => setEditor(null)
2624
2642
  },
@@ -1,5 +1,5 @@
1
1
  import Medusa from "@medusajs/js-sdk";
2
- import type { AccessPrincipal, Permission } from "../../lib/access/permissions";
2
+ import type { AccessPrincipal, Permission, SuperuserAuthority } from "../../lib/access/permissions";
3
3
  import type { PermissionContext } from "../../lib/access/config";
4
4
  import type { PermissionDecision } from "../../lib/access/explain";
5
5
  export declare const sdk: Medusa;
@@ -67,7 +67,8 @@ export declare const accessApi: {
67
67
  }>;
68
68
  me: () => Promise<{
69
69
  access: AccessPrincipal;
70
- permission_catalog?: PermissionEntry[];
70
+ permission_catalog: PermissionEntry[];
71
+ superuser_authority: SuperuserAuthority;
71
72
  roles?: Pick<Role, "id" | "name">[];
72
73
  }>;
73
74
  roles: () => Promise<{
@@ -122,6 +123,7 @@ export declare const accessApi: {
122
123
  deleteUser: (id: string) => Promise<unknown>;
123
124
  permissions: () => Promise<{
124
125
  permissions: PermissionEntry[];
126
+ superuser_authority: SuperuserAuthority;
125
127
  actor_types?: string[];
126
128
  }>;
127
129
  staff: (offset: number, q?: string) => Promise<{
@@ -138,7 +140,8 @@ export declare const accessApi: {
138
140
  };
139
141
  export declare function useAccess(): import("@tanstack/react-query").UseQueryResult<{
140
142
  access: AccessPrincipal;
141
- permission_catalog?: PermissionEntry[];
143
+ permission_catalog: PermissionEntry[];
144
+ superuser_authority: SuperuserAuthority;
142
145
  roles?: Pick<Role, "id" | "name">[];
143
146
  }, Error>;
144
147
  export declare function accessFingerprint(access: AccessPrincipal): string;
@@ -111,4 +111,4 @@ function errorMessage(error) {
111
111
  ? error.message
112
112
  : "The request failed. Reload and try again.";
113
113
  }
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FkbWluL2xpYi9hY2Nlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBK0tBLDhCQXdCQztBQUVELDhDQVVDO0FBRUQsNENBR0M7QUFFRCxvQ0FJQztBQTlORCw4REFBcUM7QUFDckMsaUNBQXlDO0FBQ3pDLHVEQUFnRTtBQVNuRCxRQUFBLEdBQUcsR0FBRyxJQUFJLGdCQUFNLENBQUM7SUFDNUIsT0FBTyxFQUNMLE9BQU8sZUFBZSxLQUFLLFFBQVE7UUFDakMsQ0FBQyxDQUFDLGVBQWU7UUFDakIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTTtJQUM1QixJQUFJLEVBQUU7UUFDSixJQUFJLEVBQUUsT0FBTyxhQUFhLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDbkUsa0JBQWtCLEVBQ2hCLE9BQU8seUJBQXlCLEtBQUssUUFBUTtZQUMzQyxDQUFDLENBQUMseUJBQXlCO1lBQzNCLENBQUMsQ0FBQyxTQUFTO0tBQ2hCO0NBQ0YsQ0FBQyxDQUFBO0FBMENGLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQTtBQUNmLFFBQUEsU0FBUyxHQUFHO0lBQ3ZCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FDWixXQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FRYixpQkFBaUIsQ0FBQztJQUN2QixTQUFTLEVBQUUsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUN4QixXQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBbUIsR0FBRyxJQUFJLFVBQVUsRUFBRSxFQUFFLENBQUM7SUFDM0QsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUNQLFdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUliLEdBQUcsSUFBSSxLQUFLLENBQUM7SUFDbEIsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLFdBQUcsQ0FBQyxNQUFN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
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FkbWluL2xpYi9hY2Nlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBcUxBLDhCQXdCQztBQUVELDhDQVVDO0FBRUQsNENBR0M7QUFFRCxvQ0FJQztBQXBPRCw4REFBcUM7QUFDckMsaUNBQXlDO0FBQ3pDLHVEQUFnRTtBQWFuRCxRQUFBLEdBQUcsR0FBRyxJQUFJLGdCQUFNLENBQUM7SUFDNUIsT0FBTyxFQUNMLE9BQU8sZUFBZSxLQUFLLFFBQVE7UUFDakMsQ0FBQyxDQUFDLGVBQWU7UUFDakIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTTtJQUM1QixJQUFJLEVBQUU7UUFDSixJQUFJLEVBQUUsT0FBTyxhQUFhLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDbkUsa0JBQWtCLEVBQ2hCLE9BQU8seUJBQXlCLEtBQUssUUFBUTtZQUMzQyxDQUFDLENBQUMseUJBQXlCO1lBQzNCLENBQUMsQ0FBQyxTQUFTO0tBQ2hCO0NBQ0YsQ0FBQyxDQUFBO0FBMENGLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQTtBQUNmLFFBQUEsU0FBUyxHQUFHO0lBQ3ZCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FDWixXQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FRYixpQkFBaUIsQ0FBQztJQUN2QixTQUFTLEVBQUUsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUN4QixXQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBbUIsR0FBRyxJQUFJLFVBQVUsRUFBRSxFQUFFLENBQUM7SUFDM0QsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUNQLFdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUtiLEdBQUcsSUFBSSxLQUFLLENBQUM7SUFDbEIsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLFdBQUcsQ0FBQyxNQUFN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
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GET = GET;
4
+ const permissions_1 = require("../../../../lib/access/permissions");
4
5
  const access_control_1 = require("../../../../modules/access-control");
5
6
  async function GET(req, res) {
6
7
  const access = req.scope.resolve(access_control_1.ACCESS_CONTROL);
@@ -10,6 +11,7 @@ async function GET(req, res) {
10
11
  ? await access.listAccessRoles({ id: principal.role_ids }, { select: ["id", "name"], take: principal.role_ids.length })
11
12
  : [];
12
13
  res.json({
14
+ superuser_authority: permissions_1.SUPERUSER_AUTHORITY,
13
15
  access: principal,
14
16
  permission_catalog: access
15
17
  .permissionDefinitions()
@@ -17,4 +19,4 @@ async function GET(req, res) {
17
19
  roles: roles.map(({ id, name }) => ({ id, name })),
18
20
  });
19
21
  }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2FjY2Vzcy9tZS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU9BLGtCQW9CQztBQXZCRCx1RUFBbUU7QUFHNUQsS0FBSyxVQUFVLEdBQUcsQ0FDdkIsR0FBK0IsRUFDL0IsR0FBbUI7SUFFbkIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQXVCLCtCQUFjLENBQUMsQ0FBQTtJQUN0RSxHQUFHLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUMxQyxNQUFNLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNuRSxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU07UUFDckMsQ0FBQyxDQUFDLE1BQU0sTUFBTSxDQUFDLGVBQWUsQ0FDMUIsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUMxQixFQUFFLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FDNUQ7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ04sR0FBRyxDQUFDLElBQUksQ0FBQztRQUNQLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLGtCQUFrQixFQUFFLE1BQU07YUFDdkIscUJBQXFCLEVBQUU7YUFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztLQUNuRCxDQUFDLENBQUE7QUFDSixDQUFDIn0=
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2FjY2Vzcy9tZS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVFBLGtCQXFCQztBQTdCRCxvRUFBd0U7QUFLeEUsdUVBQW1FO0FBRzVELEtBQUssVUFBVSxHQUFHLENBQ3ZCLEdBQStCLEVBQy9CLEdBQW1CO0lBRW5CLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUF1QiwrQkFBYyxDQUFDLENBQUE7SUFDdEUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFDMUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDbkUsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNO1FBQ3JDLENBQUMsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxlQUFlLENBQzFCLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFDMUIsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQzVEO1FBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNOLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDUCxtQkFBbUIsRUFBRSxpQ0FBbUI7UUFDeEMsTUFBTSxFQUFFLFNBQVM7UUFDakIsa0JBQWtCLEVBQUUsTUFBTTthQUN2QixxQkFBcUIsRUFBRTthQUN2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDdEQsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQ25ELENBQUMsQ0FBQTtBQUNKLENBQUMifQ==
@@ -1,10 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GET = GET;
4
+ const permissions_1 = require("../../../../lib/access/permissions");
4
5
  const access_control_1 = require("../../../../modules/access-control");
5
6
  async function GET(req, res) {
6
7
  const access = req.scope.resolve(access_control_1.ACCESS_CONTROL);
8
+ res.setHeader("Cache-Control", "no-store");
7
9
  res.json({
10
+ superuser_authority: permissions_1.SUPERUSER_AUTHORITY,
8
11
  actor_types: [
9
12
  "user",
10
13
  "customer",
@@ -15,4 +18,4 @@ async function GET(req, res) {
15
18
  .map(([id, label, group]) => ({ id, label, group })),
16
19
  });
17
20
  }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2FjY2Vzcy9wZXJtaXNzaW9ucy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLGtCQVlDO0FBZEQsdUVBQW1FO0FBRTVELEtBQUssVUFBVSxHQUFHLENBQUMsR0FBa0IsRUFBRSxHQUFtQjtJQUMvRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBdUIsK0JBQWMsQ0FBQyxDQUFBO0lBQ3RFLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDUCxXQUFXLEVBQUU7WUFDWCxNQUFNO1lBQ04sVUFBVTtZQUNWLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1NBQzFEO1FBQ0QsV0FBVyxFQUFFLE1BQU07YUFDaEIscUJBQXFCLEVBQUU7YUFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ3ZELENBQUMsQ0FBQTtBQUNKLENBQUMifQ==
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2FjY2Vzcy9wZXJtaXNzaW9ucy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUlBLGtCQWNDO0FBbEJELG9FQUF3RTtBQUV4RSx1RUFBbUU7QUFFNUQsS0FBSyxVQUFVLEdBQUcsQ0FBQyxHQUFrQixFQUFFLEdBQW1CO0lBQy9ELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUF1QiwrQkFBYyxDQUFDLENBQUE7SUFDdEUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFDMUMsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNQLG1CQUFtQixFQUFFLGlDQUFtQjtRQUN4QyxXQUFXLEVBQUU7WUFDWCxNQUFNO1lBQ04sVUFBVTtZQUNWLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1NBQzFEO1FBQ0QsV0FBVyxFQUFFLE1BQU07YUFDaEIscUJBQXFCLEVBQUU7YUFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ3ZELENBQUMsQ0FBQTtBQUNKLENBQUMifQ==