@webiny/app-security-access-management 0.0.0-mt-2 → 0.0.0-unstable.06b2ede40f

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 (119) hide show
  1. package/README.md +6 -4
  2. package/components/GroupAutocomplete/graphql.d.ts +1 -1
  3. package/components/GroupAutocomplete/graphql.js +17 -5
  4. package/components/GroupAutocomplete/graphql.js.map +1 -0
  5. package/components/GroupAutocomplete/index.d.ts +5 -2
  6. package/components/GroupAutocomplete/index.js +10 -8
  7. package/components/GroupAutocomplete/index.js.map +1 -0
  8. package/components/GroupsMultiAutocomplete/graphql.d.ts +1 -0
  9. package/components/GroupsMultiAutocomplete/graphql.js +23 -0
  10. package/components/GroupsMultiAutocomplete/graphql.js.map +1 -0
  11. package/components/GroupsMultiAutocomplete/index.d.ts +5 -0
  12. package/components/GroupsMultiAutocomplete/index.js +19 -0
  13. package/components/GroupsMultiAutocomplete/index.js.map +1 -0
  14. package/components/NotAuthorizedError/NotAuthorizedError.d.ts +2 -2
  15. package/components/NotAuthorizedError/NotAuthorizedError.js +17 -44
  16. package/components/NotAuthorizedError/NotAuthorizedError.js.map +1 -0
  17. package/components/NotAuthorizedError/index.js +3 -1
  18. package/components/NotAuthorizedError/index.js.map +1 -0
  19. package/components/TeamAutocomplete/graphql.d.ts +1 -0
  20. package/components/TeamAutocomplete/graphql.js +18 -0
  21. package/components/TeamAutocomplete/graphql.js.map +1 -0
  22. package/components/TeamAutocomplete/index.d.ts +5 -0
  23. package/components/TeamAutocomplete/index.js +18 -0
  24. package/components/TeamAutocomplete/index.js.map +1 -0
  25. package/components/TeamsMultiAutocomplete/graphql.d.ts +1 -0
  26. package/components/TeamsMultiAutocomplete/graphql.js +23 -0
  27. package/components/TeamsMultiAutocomplete/graphql.js.map +1 -0
  28. package/components/TeamsMultiAutocomplete/index.d.ts +5 -0
  29. package/components/TeamsMultiAutocomplete/index.js +19 -0
  30. package/components/TeamsMultiAutocomplete/index.js.map +1 -0
  31. package/index.d.ts +2 -2
  32. package/index.js +83 -4
  33. package/index.js.map +1 -0
  34. package/package.json +24 -37
  35. package/plugins/constants.d.ts +1 -0
  36. package/plugins/constants.js +6 -4
  37. package/plugins/constants.js.map +1 -0
  38. package/plugins/index.d.ts +1 -1
  39. package/plugins/index.js +3 -5
  40. package/plugins/index.js.map +1 -0
  41. package/plugins/installation.d.ts +1 -1
  42. package/plugins/installation.js +68 -67
  43. package/plugins/installation.js.map +1 -0
  44. package/plugins/permissionRenderer/SecurityPermissions.d.ts +8 -5
  45. package/plugins/permissionRenderer/SecurityPermissions.js +93 -94
  46. package/plugins/permissionRenderer/SecurityPermissions.js.map +1 -0
  47. package/plugins/permissionRenderer/index.js +14 -13
  48. package/plugins/permissionRenderer/index.js.map +1 -0
  49. package/plugins/routes.d.ts +1 -1
  50. package/plugins/routes.js +14 -16
  51. package/plugins/routes.js.map +1 -0
  52. package/plugins/secureRouteError.d.ts +2 -2
  53. package/plugins/secureRouteError.js +5 -3
  54. package/plugins/secureRouteError.js.map +1 -0
  55. package/types.d.ts +28 -0
  56. package/types.js +3 -0
  57. package/types.js.map +1 -0
  58. package/ui/elements/GroupAutocompleteElement.d.ts +2 -1
  59. package/ui/elements/GroupAutocompleteElement.js +27 -30
  60. package/ui/elements/GroupAutocompleteElement.js.map +1 -0
  61. package/ui/elements/GroupsMultiAutocompleteElement.d.ts +6 -0
  62. package/ui/elements/GroupsMultiAutocompleteElement.js +32 -0
  63. package/ui/elements/GroupsMultiAutocompleteElement.js.map +1 -0
  64. package/ui/elements/TeamAutocompleteElement.d.ts +6 -0
  65. package/ui/elements/TeamAutocompleteElement.js +32 -0
  66. package/ui/elements/TeamAutocompleteElement.js.map +1 -0
  67. package/ui/views/ApiKeys/ApiKeyForm.d.ts +5 -3
  68. package/ui/views/ApiKeys/ApiKeyForm.js +125 -183
  69. package/ui/views/ApiKeys/ApiKeyForm.js.map +1 -0
  70. package/ui/views/ApiKeys/ApiKeys.d.ts +8 -3
  71. package/ui/views/ApiKeys/ApiKeys.js +7 -7
  72. package/ui/views/ApiKeys/ApiKeys.js.map +1 -0
  73. package/ui/views/ApiKeys/ApiKeysDataList.d.ts +5 -3
  74. package/ui/views/ApiKeys/ApiKeysDataList.js +105 -169
  75. package/ui/views/ApiKeys/ApiKeysDataList.js.map +1 -0
  76. package/ui/views/ApiKeys/graphql.d.ts +13 -5
  77. package/ui/views/ApiKeys/graphql.js +81 -10
  78. package/ui/views/ApiKeys/graphql.js.map +1 -0
  79. package/ui/views/ApiKeys/index.d.ts +1 -1
  80. package/ui/views/ApiKeys/index.js +3 -1
  81. package/ui/views/ApiKeys/index.js.map +1 -0
  82. package/ui/views/ApiKeys/utils.d.ts +2 -1
  83. package/ui/views/ApiKeys/utils.js +6 -5
  84. package/ui/views/ApiKeys/utils.js.map +1 -0
  85. package/ui/views/Groups/Groups.d.ts +8 -3
  86. package/ui/views/Groups/Groups.js +8 -8
  87. package/ui/views/Groups/Groups.js.map +1 -0
  88. package/ui/views/Groups/GroupsDataList.d.ts +5 -3
  89. package/ui/views/Groups/GroupsDataList.js +110 -176
  90. package/ui/views/Groups/GroupsDataList.js.map +1 -0
  91. package/ui/views/Groups/GroupsForm.d.ts +5 -3
  92. package/ui/views/Groups/GroupsForm.js +150 -170
  93. package/ui/views/Groups/GroupsForm.js.map +1 -0
  94. package/ui/views/Groups/graphql.d.ts +13 -5
  95. package/ui/views/Groups/graphql.js +84 -10
  96. package/ui/views/Groups/graphql.js.map +1 -0
  97. package/ui/views/Groups/index.d.ts +1 -1
  98. package/ui/views/Groups/index.js +3 -1
  99. package/ui/views/Groups/index.js.map +1 -0
  100. package/ui/views/Teams/Teams.d.ts +8 -0
  101. package/ui/views/Teams/Teams.js +12 -0
  102. package/ui/views/Teams/Teams.js.map +1 -0
  103. package/ui/views/Teams/TeamsDataList.d.ts +5 -0
  104. package/ui/views/Teams/TeamsDataList.js +151 -0
  105. package/ui/views/Teams/TeamsDataList.js.map +1 -0
  106. package/ui/views/Teams/TeamsForm.d.ts +5 -0
  107. package/ui/views/Teams/TeamsForm.js +173 -0
  108. package/ui/views/Teams/TeamsForm.js.map +1 -0
  109. package/ui/views/Teams/graphql.d.ts +13 -0
  110. package/ui/views/Teams/graphql.js +89 -0
  111. package/ui/views/Teams/graphql.js.map +1 -0
  112. package/ui/views/Teams/index.d.ts +1 -0
  113. package/ui/views/Teams/index.js +3 -0
  114. package/ui/views/Teams/index.js.map +1 -0
  115. package/ui/views/utils.d.ts +3 -2
  116. package/ui/views/utils.js +6 -23
  117. package/ui/views/utils.js.map +1 -0
  118. package/plugins/menus.d.ts +0 -4
  119. package/plugins/menus.js +0 -61
package/plugins/index.js CHANGED
@@ -1,8 +1,6 @@
1
- import routes from "./routes";
2
- import menus from "./menus";
3
1
  import installation from "./installation";
4
2
  import permissionRenderer from "./permissionRenderer";
5
3
  import secureRouteError from "./secureRouteError";
6
- export default (function () {
7
- return [routes, menus, installation, permissionRenderer, secureRouteError];
8
- });
4
+ export default () => [installation, permissionRenderer, secureRouteError];
5
+
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["installation","permissionRenderer","secureRouteError"],"sources":["index.ts"],"sourcesContent":["import type { PluginCollection } from \"@webiny/plugins/types\";\nimport installation from \"./installation\";\nimport permissionRenderer from \"./permissionRenderer\";\nimport secureRouteError from \"~/plugins/secureRouteError\";\n\nexport default (): PluginCollection => [installation, permissionRenderer, secureRouteError];\n"],"mappings":"AACA,OAAOA,YAAY;AACnB,OAAOC,kBAAkB;AACzB,OAAOC,gBAAgB;AAEvB,eAAe,MAAwB,CAACF,YAAY,EAAEC,kBAAkB,EAAEC,gBAAgB,CAAC","ignoreList":[]}
@@ -1,3 +1,3 @@
1
- import { AdminInstallationPlugin } from "@webiny/app-admin/types";
1
+ import type { AdminInstallationPlugin } from "@webiny/app-admin/types";
2
2
  declare const plugin: AdminInstallationPlugin;
3
3
  export default plugin;
@@ -1,99 +1,100 @@
1
- import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
- import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
4
-
5
- var _templateObject, _templateObject2;
6
-
7
- import _regeneratorRuntime from "@babel/runtime/regenerator";
1
+ import _styled from "@emotion/styled/base";
2
+ function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
8
3
  import React, { useState, useEffect } from "react";
9
4
  import gql from "graphql-tag";
10
5
  import { useApolloClient } from "@apollo/react-hooks";
11
6
  import { Alert } from "@webiny/ui/Alert";
12
7
  import { CircularProgress } from "@webiny/ui/Progress";
13
8
  import { SimpleForm, SimpleFormContent } from "@webiny/app-admin/components/SimpleForm";
14
- import styled from "@emotion/styled";
15
- var SimpleFormPlaceholder = /*#__PURE__*/styled("div", {
9
+ const SimpleFormPlaceholder = /*#__PURE__*/_styled("div", process.env.NODE_ENV === "production" ? {
10
+ target: "evolwsn0"
11
+ } : {
16
12
  target: "evolwsn0",
17
13
  label: "SimpleFormPlaceholder"
18
- })({
19
- minHeight: 300,
20
- minWidth: 400
14
+ })(process.env.NODE_ENV === "production" ? {
15
+ name: "u16u3o",
16
+ styles: "min-height:300px;min-width:400px"
17
+ } : {
18
+ name: "u16u3o",
19
+ styles: "min-height:300px;min-width:400px",
20
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluc3RhbGxhdGlvbi50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUzhCIiwiZmlsZSI6Imluc3RhbGxhdGlvbi50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGdxbCBmcm9tIFwiZ3JhcGhxbC10YWdcIjtcbmltcG9ydCB7IHVzZUFwb2xsb0NsaWVudCB9IGZyb20gXCJAYXBvbGxvL3JlYWN0LWhvb2tzXCI7XG5pbXBvcnQgeyBBbGVydCB9IGZyb20gXCJAd2ViaW55L3VpL0FsZXJ0XCI7XG5pbXBvcnQgeyBDaXJjdWxhclByb2dyZXNzIH0gZnJvbSBcIkB3ZWJpbnkvdWkvUHJvZ3Jlc3NcIjtcbmltcG9ydCB7IFNpbXBsZUZvcm0sIFNpbXBsZUZvcm1Db250ZW50IH0gZnJvbSBcIkB3ZWJpbnkvYXBwLWFkbWluL2NvbXBvbmVudHMvU2ltcGxlRm9ybVwiO1xuaW1wb3J0IHN0eWxlZCBmcm9tIFwiQGVtb3Rpb24vc3R5bGVkXCI7XG5pbXBvcnQgdHlwZSB7IEFkbWluSW5zdGFsbGF0aW9uUGx1Z2luIH0gZnJvbSBcIkB3ZWJpbnkvYXBwLWFkbWluL3R5cGVzXCI7XG5cbmNvbnN0IFNpbXBsZUZvcm1QbGFjZWhvbGRlciA9IHN0eWxlZC5kaXYoe1xuICAgIG1pbkhlaWdodDogMzAwLFxuICAgIG1pbldpZHRoOiA0MDBcbn0pO1xuXG5jb25zdCBJU19JTlNUQUxMRUQgPSBncWxgXG4gICAgcXVlcnkgSXNTZWN1cml0eUluc3RhbGxlZCB7XG4gICAgICAgIHNlY3VyaXR5IHtcbiAgICAgICAgICAgIHZlcnNpb25cbiAgICAgICAgfVxuICAgIH1cbmA7XG5cbmNvbnN0IElOU1RBTEwgPSBncWxgXG4gICAgbXV0YXRpb24gSW5zdGFsbFNlY3VyaXR5IHtcbiAgICAgICAgc2VjdXJpdHkge1xuICAgICAgICAgICAgaW5zdGFsbCB7XG4gICAgICAgICAgICAgICAgZGF0YVxuICAgICAgICAgICAgICAgIGVycm9yIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZVxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuYDtcblxuaW50ZXJmYWNlIFNlY3VyaXR5SW5zdGFsbGVyUHJvcHMge1xuICAgIG9uSW5zdGFsbGVkOiAoKSA9PiB2b2lkO1xufVxuY29uc3QgU2VjdXJpdHlJbnN0YWxsZXIgPSAoeyBvbkluc3RhbGxlZCB9OiBTZWN1cml0eUluc3RhbGxlclByb3BzKSA9PiB7XG4gICAgY29uc3QgY2xpZW50ID0gdXNlQXBvbGxvQ2xpZW50KCk7XG4gICAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZShudWxsKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNsaWVudC5tdXRhdGUoeyBtdXRhdGlvbjogSU5TVEFMTCB9KS50aGVuKCh7IGRhdGEgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBlcnJvciB9ID0gZGF0YS5zZWN1cml0eS5pbnN0YWxsO1xuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgc2V0RXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBKdXN0IHNvIHRoZSB1c2VyIHNlZXMgdGhlIGFjdHVhbCBtZXNzYWdlLlxuICAgICAgICAgICAgc2V0VGltZW91dChvbkluc3RhbGxlZCwgMzAwMCk7XG4gICAgICAgIH0pO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IGxhYmVsID0gZXJyb3IgPyAoXG4gICAgICAgIDxBbGVydCB0aXRsZT17YFNvbWV0aGluZyB3ZW50IHdyb25nYH0gdHlwZT17XCJkYW5nZXJcIn0+XG4gICAgICAgICAgICB7ZXJyb3J9XG4gICAgICAgIDwvQWxlcnQ+XG4gICAgKSA6IChcbiAgICAgICAgYEluc3RhbGxpbmcgU2VjdXJpdHkuLi5gXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxTaW1wbGVGb3JtPlxuICAgICAgICAgICAgPENpcmN1bGFyUHJvZ3Jlc3MgbGFiZWw9e2xhYmVsfSAvPlxuICAgICAgICAgICAgPFNpbXBsZUZvcm1Db250ZW50PlxuICAgICAgICAgICAgICAgIDxTaW1wbGVGb3JtUGxhY2Vob2xkZXIgLz5cbiAgICAgICAgICAgIDwvU2ltcGxlRm9ybUNvbnRlbnQ+XG4gICAgICAgIDwvU2ltcGxlRm9ybT5cbiAgICApO1xufTtcblxuY29uc3QgcGx1Z2luOiBBZG1pbkluc3RhbGxhdGlvblBsdWdpbiA9IHtcbiAgICBuYW1lOiBcImFkbWluLWluc3RhbGxhdGlvbi1zZWN1cml0eVwiLFxuICAgIHR5cGU6IFwiYWRtaW4taW5zdGFsbGF0aW9uXCIsXG4gICAgdGl0bGU6IGBTZWN1cml0eWAsXG4gICAgZGVwZW5kZW5jaWVzOiBbYGFkbWluLWluc3RhbGxhdGlvbi10ZW5hbmN5YF0sXG4gICAgc2VjdXJlOiBmYWxzZSxcbiAgICBhc3luYyBnZXRJbnN0YWxsZWRWZXJzaW9uKHsgY2xpZW50IH0pIHtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBjbGllbnQucXVlcnkoeyBxdWVyeTogSVNfSU5TVEFMTEVEIH0pO1xuICAgICAgICByZXR1cm4gZGF0YS5zZWN1cml0eS52ZXJzaW9uO1xuICAgIH0sXG4gICAgcmVuZGVyKHsgb25JbnN0YWxsZWQgfSkge1xuICAgICAgICByZXR1cm4gPFNlY3VyaXR5SW5zdGFsbGVyIG9uSW5zdGFsbGVkPXtvbkluc3RhbGxlZH0gLz47XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgcGx1Z2luO1xuIl19 */",
21
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__
21
22
  });
22
- var IS_INSTALLED = gql(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n query IsSecurityInstalled {\n security {\n version\n }\n }\n"])));
23
- var INSTALL = gql(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n mutation InstallSecurity {\n security {\n install {\n data\n error {\n code\n message\n }\n }\n }\n }\n"])));
24
-
25
- var SecurityInstaller = function SecurityInstaller(_ref) {
26
- var onInstalled = _ref.onInstalled;
27
- var client = useApolloClient();
28
-
29
- var _useState = useState(null),
30
- _useState2 = _slicedToArray(_useState, 2),
31
- error = _useState2[0],
32
- setError = _useState2[1];
33
-
34
- useEffect(function () {
23
+ const IS_INSTALLED = gql`
24
+ query IsSecurityInstalled {
25
+ security {
26
+ version
27
+ }
28
+ }
29
+ `;
30
+ const INSTALL = gql`
31
+ mutation InstallSecurity {
32
+ security {
33
+ install {
34
+ data
35
+ error {
36
+ code
37
+ message
38
+ }
39
+ }
40
+ }
41
+ }
42
+ `;
43
+ const SecurityInstaller = ({
44
+ onInstalled
45
+ }) => {
46
+ const client = useApolloClient();
47
+ const [error, setError] = useState(null);
48
+ useEffect(() => {
35
49
  client.mutate({
36
50
  mutation: INSTALL
37
- }).then(function (_ref2) {
38
- var data = _ref2.data;
39
- var error = data.security.install.error;
40
-
51
+ }).then(({
52
+ data
53
+ }) => {
54
+ const {
55
+ error
56
+ } = data.security.install;
41
57
  if (error) {
42
58
  setError(error.message);
43
59
  return;
44
- } // Just so the user sees the actual message.
45
-
60
+ }
46
61
 
62
+ // Just so the user sees the actual message.
47
63
  setTimeout(onInstalled, 3000);
48
64
  });
49
65
  }, []);
50
- var label = error ? /*#__PURE__*/React.createElement(Alert, {
51
- title: "Something went wrong",
66
+ const label = error ? /*#__PURE__*/React.createElement(Alert, {
67
+ title: `Something went wrong`,
52
68
  type: "danger"
53
- }, error) : "Installing Security...";
69
+ }, error) : `Installing Security...`;
54
70
  return /*#__PURE__*/React.createElement(SimpleForm, null, /*#__PURE__*/React.createElement(CircularProgress, {
55
71
  label: label
56
72
  }), /*#__PURE__*/React.createElement(SimpleFormContent, null, /*#__PURE__*/React.createElement(SimpleFormPlaceholder, null)));
57
73
  };
58
-
59
- var plugin = {
74
+ const plugin = {
60
75
  name: "admin-installation-security",
61
76
  type: "admin-installation",
62
- title: "Security",
63
- dependencies: ["admin-installation-tenancy"],
77
+ title: `Security`,
78
+ dependencies: [`admin-installation-tenancy`],
64
79
  secure: false,
65
- getInstalledVersion: function getInstalledVersion(_ref3) {
66
- return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
67
- var client, _yield$client$query, data;
68
-
69
- return _regeneratorRuntime.wrap(function _callee$(_context) {
70
- while (1) {
71
- switch (_context.prev = _context.next) {
72
- case 0:
73
- client = _ref3.client;
74
- _context.next = 3;
75
- return client.query({
76
- query: IS_INSTALLED
77
- });
78
-
79
- case 3:
80
- _yield$client$query = _context.sent;
81
- data = _yield$client$query.data;
82
- return _context.abrupt("return", data.security.version);
83
-
84
- case 6:
85
- case "end":
86
- return _context.stop();
87
- }
88
- }
89
- }, _callee);
90
- }))();
80
+ async getInstalledVersion({
81
+ client
82
+ }) {
83
+ const {
84
+ data
85
+ } = await client.query({
86
+ query: IS_INSTALLED
87
+ });
88
+ return data.security.version;
91
89
  },
92
- render: function render(_ref4) {
93
- var onInstalled = _ref4.onInstalled;
90
+ render({
91
+ onInstalled
92
+ }) {
94
93
  return /*#__PURE__*/React.createElement(SecurityInstaller, {
95
94
  onInstalled: onInstalled
96
95
  });
97
96
  }
98
97
  };
99
- export default plugin;
98
+ export default plugin;
99
+
100
+ //# sourceMappingURL=installation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useState","useEffect","gql","useApolloClient","Alert","CircularProgress","SimpleForm","SimpleFormContent","SimpleFormPlaceholder","_styled","process","env","NODE_ENV","target","label","name","styles","map","toString","_EMOTION_STRINGIFIED_CSS_ERROR__","IS_INSTALLED","INSTALL","SecurityInstaller","onInstalled","client","error","setError","mutate","mutation","then","data","security","install","message","setTimeout","createElement","title","type","plugin","dependencies","secure","getInstalledVersion","query","version","render"],"sources":["installation.tsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport gql from \"graphql-tag\";\nimport { useApolloClient } from \"@apollo/react-hooks\";\nimport { Alert } from \"@webiny/ui/Alert\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { SimpleForm, SimpleFormContent } from \"@webiny/app-admin/components/SimpleForm\";\nimport styled from \"@emotion/styled\";\nimport type { AdminInstallationPlugin } from \"@webiny/app-admin/types\";\n\nconst SimpleFormPlaceholder = styled.div({\n minHeight: 300,\n minWidth: 400\n});\n\nconst IS_INSTALLED = gql`\n query IsSecurityInstalled {\n security {\n version\n }\n }\n`;\n\nconst INSTALL = gql`\n mutation InstallSecurity {\n security {\n install {\n data\n error {\n code\n message\n }\n }\n }\n }\n`;\n\ninterface SecurityInstallerProps {\n onInstalled: () => void;\n}\nconst SecurityInstaller = ({ onInstalled }: SecurityInstallerProps) => {\n const client = useApolloClient();\n const [error, setError] = useState(null);\n\n useEffect(() => {\n client.mutate({ mutation: INSTALL }).then(({ data }) => {\n const { error } = data.security.install;\n if (error) {\n setError(error.message);\n return;\n }\n\n // Just so the user sees the actual message.\n setTimeout(onInstalled, 3000);\n });\n }, []);\n\n const label = error ? (\n <Alert title={`Something went wrong`} type={\"danger\"}>\n {error}\n </Alert>\n ) : (\n `Installing Security...`\n );\n\n return (\n <SimpleForm>\n <CircularProgress label={label} />\n <SimpleFormContent>\n <SimpleFormPlaceholder />\n </SimpleFormContent>\n </SimpleForm>\n );\n};\n\nconst plugin: AdminInstallationPlugin = {\n name: \"admin-installation-security\",\n type: \"admin-installation\",\n title: `Security`,\n dependencies: [`admin-installation-tenancy`],\n secure: false,\n async getInstalledVersion({ client }) {\n const { data } = await client.query({ query: IS_INSTALLED });\n return data.security.version;\n },\n render({ onInstalled }) {\n return <SecurityInstaller onInstalled={onInstalled} />;\n }\n};\n\nexport default plugin;\n"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,QAAQ,EAAEC,SAAS,QAAQ,OAAO;AAClD,OAAOC,GAAG,MAAM,aAAa;AAC7B,SAASC,eAAe,QAAQ,qBAAqB;AACrD,SAASC,KAAK,QAAQ,kBAAkB;AACxC,SAASC,gBAAgB,QAAQ,qBAAqB;AACtD,SAASC,UAAU,EAAEC,iBAAiB,QAAQ,yCAAyC;AAIvF,MAAMC,qBAAqB,gBAAGC,OAAA,QAAAC,OAAA,CAAAC,GAAA,CAAAC,QAAA;EAAAC,MAAA;AAAA;EAAAA,MAAA;EAAAC,KAAA;AAAA,GAAAJ,OAAA,CAAAC,GAAA,CAAAC,QAAA;EAAAG,IAAA;EAAAC,MAAA;AAAA;EAAAD,IAAA;EAAAC,MAAA;EAAAC,GAAA;EAAAC,QAAA,EAAAC;AAAA,CAG7B,CAAC;AAEF,MAAMC,YAAY,GAAGlB,GAAG;AACxB;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,MAAMmB,OAAO,GAAGnB,GAAG;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAKD,MAAMoB,iBAAiB,GAAGA,CAAC;EAAEC;AAAoC,CAAC,KAAK;EACnE,MAAMC,MAAM,GAAGrB,eAAe,CAAC,CAAC;EAChC,MAAM,CAACsB,KAAK,EAAEC,QAAQ,CAAC,GAAG1B,QAAQ,CAAC,IAAI,CAAC;EAExCC,SAAS,CAAC,MAAM;IACZuB,MAAM,CAACG,MAAM,CAAC;MAAEC,QAAQ,EAAEP;IAAQ,CAAC,CAAC,CAACQ,IAAI,CAAC,CAAC;MAAEC;IAAK,CAAC,KAAK;MACpD,MAAM;QAAEL;MAAM,CAAC,GAAGK,IAAI,CAACC,QAAQ,CAACC,OAAO;MACvC,IAAIP,KAAK,EAAE;QACPC,QAAQ,CAACD,KAAK,CAACQ,OAAO,CAAC;QACvB;MACJ;;MAEA;MACAC,UAAU,CAACX,WAAW,EAAE,IAAI,CAAC;IACjC,CAAC,CAAC;EACN,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMT,KAAK,GAAGW,KAAK,gBACf1B,KAAA,CAAAoC,aAAA,CAAC/B,KAAK;IAACgC,KAAK,EAAE,sBAAuB;IAACC,IAAI,EAAE;EAAS,GAChDZ,KACE,CAAC,GAER,wBACH;EAED,oBACI1B,KAAA,CAAAoC,aAAA,CAAC7B,UAAU,qBACPP,KAAA,CAAAoC,aAAA,CAAC9B,gBAAgB;IAACS,KAAK,EAAEA;EAAM,CAAE,CAAC,eAClCf,KAAA,CAAAoC,aAAA,CAAC5B,iBAAiB,qBACdR,KAAA,CAAAoC,aAAA,CAAC3B,qBAAqB,MAAE,CACT,CACX,CAAC;AAErB,CAAC;AAED,MAAM8B,MAA+B,GAAG;EACpCvB,IAAI,EAAE,6BAA6B;EACnCsB,IAAI,EAAE,oBAAoB;EAC1BD,KAAK,EAAE,UAAU;EACjBG,YAAY,EAAE,CAAC,4BAA4B,CAAC;EAC5CC,MAAM,EAAE,KAAK;EACb,MAAMC,mBAAmBA,CAAC;IAAEjB;EAAO,CAAC,EAAE;IAClC,MAAM;MAAEM;IAAK,CAAC,GAAG,MAAMN,MAAM,CAACkB,KAAK,CAAC;MAAEA,KAAK,EAAEtB;IAAa,CAAC,CAAC;IAC5D,OAAOU,IAAI,CAACC,QAAQ,CAACY,OAAO;EAChC,CAAC;EACDC,MAAMA,CAAC;IAAErB;EAAY,CAAC,EAAE;IACpB,oBAAOxB,KAAA,CAAAoC,aAAA,CAACb,iBAAiB;MAACC,WAAW,EAAEA;IAAY,CAAE,CAAC;EAC1D;AACJ,CAAC;AAED,eAAee,MAAM","ignoreList":[]}
@@ -1,5 +1,8 @@
1
- /// <reference types="react" />
2
- export declare const SecurityPermissions: ({ value, onChange }: {
3
- value: any;
4
- onChange: any;
5
- }) => JSX.Element;
1
+ import React from "react";
2
+ import type { SecurityPermission } from "@webiny/app-security/types";
3
+ interface SecurityPermissionsProps {
4
+ value: SecurityPermission[];
5
+ onChange: (value: SecurityPermission[]) => void;
6
+ }
7
+ export declare const SecurityPermissions: ({ value, onChange }: SecurityPermissionsProps) => React.JSX.Element;
8
+ export {};
@@ -1,176 +1,175 @@
1
- import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
2
-
3
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13;
4
-
5
1
  import React, { Fragment, useCallback, useMemo } from "react";
6
2
  import { Grid, Cell } from "@webiny/ui/Grid";
7
3
  import { Select } from "@webiny/ui/Select";
8
4
  import { i18n } from "@webiny/app/i18n";
9
- import { PermissionInfo, gridNoPaddingClass } from "@webiny/app-admin/components/Permissions";
5
+ import { CannotUseAaclAlert, PermissionInfo, gridWithPaddingClass, PermissionsGroup } from "@webiny/app-admin/components/Permissions";
10
6
  import { Form } from "@webiny/form";
11
- import { Elevation } from "@webiny/ui/Elevation";
12
- import { Typography } from "@webiny/ui/Typography";
13
- var t = i18n.ns("app-security-admin-users/plugins/permissionRenderer");
14
- var SECURITY = "security";
15
- var SECURITY_FULL_ACCESS = "".concat(SECURITY, ".*");
16
- var SECURITY_GROUP_ACCESS = "".concat(SECURITY, ".group");
17
- var SECURITY_API_KEY_ACCESS = "".concat(SECURITY, ".apiKey");
18
- var FULL_ACCESS = "full";
19
- var NO_ACCESS = "no";
20
- var CUSTOM_ACCESS = "custom";
21
- export var SecurityPermissions = function SecurityPermissions(_ref) {
22
- var value = _ref.value,
23
- onChange = _ref.onChange;
24
- var onFormChange = useCallback(function (data) {
25
- var newValue = [];
26
-
7
+ import { useSecurity } from "@webiny/app-security";
8
+ import { useWcp } from "@webiny/app-admin";
9
+ const t = i18n.ns("app-security-admin-users/plugins/permissionRenderer");
10
+ const SECURITY = "security";
11
+ const SECURITY_FULL_ACCESS = `${SECURITY}.*`;
12
+ const SECURITY_GROUP_ACCESS = `${SECURITY}.group`;
13
+ const SECURITY_TEAM_ACCESS = `${SECURITY}.team`;
14
+ const SECURITY_API_KEY_ACCESS = `${SECURITY}.apiKey`;
15
+ const FULL_ACCESS = "full";
16
+ const NO_ACCESS = "no";
17
+ const CUSTOM_ACCESS = "custom";
18
+ export const SecurityPermissions = ({
19
+ value,
20
+ onChange
21
+ }) => {
22
+ const {
23
+ getPermission
24
+ } = useSecurity();
25
+ const wcp = useWcp();
26
+
27
+ // We disable form elements for custom permissions if AACL cannot be used.
28
+ const cannotUseAacl = useMemo(() => {
29
+ return !getPermission("aacl", true);
30
+ }, []);
31
+ const teams = wcp.canUseTeams();
32
+ const onFormChange = useCallback(formData => {
33
+ let newValue = [];
27
34
  if (Array.isArray(value)) {
28
35
  // Let's just filter out the `security*` permission objects, it's easier to build new ones from scratch.
29
- newValue = value.filter(function (item) {
30
- return !item.name.startsWith(SECURITY);
31
- });
36
+ newValue = value.filter(item => !item.name.startsWith(SECURITY));
32
37
  }
33
-
34
- var permissions = [];
35
-
36
- if (data.accessLevel === FULL_ACCESS) {
38
+ const permissions = [];
39
+ if (formData.accessLevel === FULL_ACCESS) {
37
40
  permissions.push({
38
41
  name: SECURITY_FULL_ACCESS
39
42
  });
40
- } else if (data.accessLevel === CUSTOM_ACCESS) {
41
- if (data.groupAccessScope === FULL_ACCESS) {
43
+ } else if (formData.accessLevel === CUSTOM_ACCESS) {
44
+ if (formData.groupAccessScope === FULL_ACCESS) {
42
45
  permissions.push({
43
46
  name: SECURITY_GROUP_ACCESS
44
47
  });
45
48
  }
46
-
47
- if (data.apiKeyAccessScope === FULL_ACCESS) {
49
+ if (formData.teamAccessScope === FULL_ACCESS) {
50
+ permissions.push({
51
+ name: SECURITY_TEAM_ACCESS
52
+ });
53
+ }
54
+ if (formData.apiKeyAccessScope === FULL_ACCESS) {
48
55
  permissions.push({
49
56
  name: SECURITY_API_KEY_ACCESS
50
57
  });
51
58
  }
52
59
  }
53
-
54
60
  if (permissions && permissions.length) {
55
- var _newValue;
56
-
57
- (_newValue = newValue).push.apply(_newValue, permissions);
61
+ newValue.push(...permissions);
58
62
  }
59
-
60
63
  onChange(newValue);
61
64
  }, [value]);
62
- var formData = useMemo(function () {
65
+ const formData = useMemo(() => {
63
66
  if (!Array.isArray(value)) {
64
67
  return {
65
68
  accessLevel: NO_ACCESS
66
69
  };
67
70
  }
68
-
69
- var hasFullAccess = value.find(function (item) {
70
- return item.name === SECURITY_FULL_ACCESS || item.name === "*";
71
- });
72
-
71
+ const hasFullAccess = value.find(item => item.name === SECURITY_FULL_ACCESS || item.name === "*");
73
72
  if (hasFullAccess) {
74
73
  return {
75
74
  accessLevel: FULL_ACCESS
76
75
  };
77
76
  }
78
-
79
- var permissions = value.filter(function (item) {
80
- return item.name.startsWith(SECURITY);
81
- });
82
-
77
+ const permissions = value.filter(item => item.name.startsWith(SECURITY));
83
78
  if (permissions.length === 0) {
84
79
  return {
85
80
  accessLevel: NO_ACCESS
86
81
  };
87
82
  }
88
-
89
- var data = {
83
+ const data = {
90
84
  accessLevel: CUSTOM_ACCESS,
91
85
  groupAccessScope: NO_ACCESS,
86
+ teamAccessScope: NO_ACCESS,
92
87
  apiKeyAccessScope: NO_ACCESS
93
88
  };
94
- var hasGroupAccess = permissions.find(function (item) {
95
- return item.name === SECURITY_GROUP_ACCESS;
96
- });
97
-
89
+ const hasGroupAccess = permissions.find(item => item.name === SECURITY_GROUP_ACCESS);
98
90
  if (hasGroupAccess) {
99
91
  data.groupAccessScope = FULL_ACCESS;
100
92
  }
101
-
102
- var hasApiKeyAccess = permissions.find(function (item) {
103
- return item.name === SECURITY_API_KEY_ACCESS;
104
- });
105
-
93
+ const hasTeamAccess = permissions.find(item => item.name === SECURITY_TEAM_ACCESS);
94
+ if (hasTeamAccess) {
95
+ data.teamAccessScope = FULL_ACCESS;
96
+ }
97
+ const hasApiKeyAccess = permissions.find(item => item.name === SECURITY_API_KEY_ACCESS);
106
98
  if (hasApiKeyAccess) {
107
99
  data.apiKeyAccessScope = FULL_ACCESS;
108
100
  }
109
-
110
101
  return data;
111
102
  }, []);
112
103
  return /*#__PURE__*/React.createElement(Form, {
113
104
  data: formData,
114
105
  onChange: onFormChange
115
- }, function (_ref2) {
116
- var data = _ref2.data,
117
- Bind = _ref2.Bind;
106
+ }, ({
107
+ data,
108
+ Bind
109
+ }) => {
118
110
  return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(Grid, {
119
- className: gridNoPaddingClass
111
+ className: gridWithPaddingClass
112
+ }, /*#__PURE__*/React.createElement(Cell, {
113
+ span: 12
114
+ }, data.accessLevel === "custom" && cannotUseAacl && /*#__PURE__*/React.createElement(CannotUseAaclAlert, null))), /*#__PURE__*/React.createElement(Grid, {
115
+ className: gridWithPaddingClass
120
116
  }, /*#__PURE__*/React.createElement(Cell, {
121
117
  span: 6
122
118
  }, /*#__PURE__*/React.createElement(PermissionInfo, {
123
- title: t(_templateObject || (_templateObject = _taggedTemplateLiteral(["Access Level"])))
119
+ title: t`Access Level`
124
120
  })), /*#__PURE__*/React.createElement(Cell, {
125
121
  span: 6
126
122
  }, /*#__PURE__*/React.createElement(Bind, {
127
123
  name: "accessLevel"
128
- }, /*#__PURE__*/React.createElement(Select, {
129
- label: t(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["Access Level"])))
130
- }, /*#__PURE__*/React.createElement("option", {
124
+ }, /*#__PURE__*/React.createElement(Select, null, /*#__PURE__*/React.createElement("option", {
131
125
  value: NO_ACCESS
132
- }, t(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["No access"])))), /*#__PURE__*/React.createElement("option", {
126
+ }, t`No access`), /*#__PURE__*/React.createElement("option", {
133
127
  value: FULL_ACCESS
134
- }, t(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["Full access"])))), /*#__PURE__*/React.createElement("option", {
128
+ }, t`Full access`), /*#__PURE__*/React.createElement("option", {
135
129
  value: CUSTOM_ACCESS
136
- }, t(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["Custom access"])))))))), data.accessLevel === CUSTOM_ACCESS && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Elevation, {
137
- z: 1,
138
- style: {
139
- marginTop: 10
140
- }
130
+ }, t`Custom access`))))), data.accessLevel === CUSTOM_ACCESS && /*#__PURE__*/React.createElement("div", {
131
+ className: "wby-mt-lg"
132
+ }, /*#__PURE__*/React.createElement(PermissionsGroup, {
133
+ title: t`API Keys`
141
134
  }, /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Cell, {
142
135
  span: 12
143
- }, /*#__PURE__*/React.createElement(Typography, {
144
- use: "overline"
145
- }, t(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["API Keys"]))))), /*#__PURE__*/React.createElement(Cell, {
146
- span: 12
147
136
  }, /*#__PURE__*/React.createElement(Bind, {
148
137
  name: "apiKeyAccessScope"
149
138
  }, /*#__PURE__*/React.createElement(Select, {
150
- label: t(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["Access Scope"])))
139
+ label: t`Access Scope`,
140
+ disabled: cannotUseAacl
151
141
  }, /*#__PURE__*/React.createElement("option", {
152
142
  value: NO_ACCESS
153
- }, t(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["No access"])))), /*#__PURE__*/React.createElement("option", {
143
+ }, t`No access`), /*#__PURE__*/React.createElement("option", {
154
144
  value: FULL_ACCESS
155
- }, t(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["Full access"]))))))))), /*#__PURE__*/React.createElement(Elevation, {
156
- z: 1,
157
- style: {
158
- marginTop: 10
159
- }
145
+ }, t`Full access`)))))), /*#__PURE__*/React.createElement(PermissionsGroup, {
146
+ title: t`Roles`
160
147
  }, /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Cell, {
161
148
  span: 12
162
- }, /*#__PURE__*/React.createElement(Typography, {
163
- use: "overline"
164
- }, t(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["Groups"]))))), /*#__PURE__*/React.createElement(Cell, {
165
- span: 12
166
149
  }, /*#__PURE__*/React.createElement(Bind, {
167
150
  name: "groupAccessScope"
168
151
  }, /*#__PURE__*/React.createElement(Select, {
169
- label: t(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["Access Scope"])))
152
+ label: t`Access Scope`,
153
+ disabled: cannotUseAacl
154
+ }, /*#__PURE__*/React.createElement("option", {
155
+ value: NO_ACCESS
156
+ }, t`No access`), /*#__PURE__*/React.createElement("option", {
157
+ value: FULL_ACCESS
158
+ }, t`Full access`)))))), teams && /*#__PURE__*/React.createElement(PermissionsGroup, {
159
+ title: t`Teams`
160
+ }, /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Cell, {
161
+ span: 12
162
+ }, /*#__PURE__*/React.createElement(Bind, {
163
+ name: "teamAccessScope"
164
+ }, /*#__PURE__*/React.createElement(Select, {
165
+ label: t`Access Scope`,
166
+ disabled: cannotUseAacl
170
167
  }, /*#__PURE__*/React.createElement("option", {
171
168
  value: NO_ACCESS
172
- }, t(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral(["No access"])))), /*#__PURE__*/React.createElement("option", {
169
+ }, t`No access`), /*#__PURE__*/React.createElement("option", {
173
170
  value: FULL_ACCESS
174
- }, t(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral(["Full access"])))))))))));
171
+ }, t`Full access`))))))));
175
172
  });
176
- };
173
+ };
174
+
175
+ //# sourceMappingURL=SecurityPermissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Fragment","useCallback","useMemo","Grid","Cell","Select","i18n","CannotUseAaclAlert","PermissionInfo","gridWithPaddingClass","PermissionsGroup","Form","useSecurity","useWcp","t","ns","SECURITY","SECURITY_FULL_ACCESS","SECURITY_GROUP_ACCESS","SECURITY_TEAM_ACCESS","SECURITY_API_KEY_ACCESS","FULL_ACCESS","NO_ACCESS","CUSTOM_ACCESS","SecurityPermissions","value","onChange","getPermission","wcp","cannotUseAacl","teams","canUseTeams","onFormChange","formData","newValue","Array","isArray","filter","item","name","startsWith","permissions","accessLevel","push","groupAccessScope","teamAccessScope","apiKeyAccessScope","length","hasFullAccess","find","data","hasGroupAccess","hasTeamAccess","hasApiKeyAccess","createElement","Bind","className","span","title","label","disabled"],"sources":["SecurityPermissions.tsx"],"sourcesContent":["import React, { Fragment, useCallback, useMemo } from \"react\";\nimport { Grid, Cell } from \"@webiny/ui/Grid\";\nimport { Select } from \"@webiny/ui/Select\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport {\n CannotUseAaclAlert,\n PermissionInfo,\n gridWithPaddingClass,\n PermissionsGroup\n} from \"@webiny/app-admin/components/Permissions\";\nimport { Form } from \"@webiny/form\";\nimport type { SecurityPermission } from \"@webiny/app-security/types\";\nimport { useSecurity } from \"@webiny/app-security\";\nimport type { AaclPermission } from \"@webiny/app-admin\";\nimport { useWcp } from \"@webiny/app-admin\";\n\nconst t = i18n.ns(\"app-security-admin-users/plugins/permissionRenderer\");\n\nconst SECURITY = \"security\";\nconst SECURITY_FULL_ACCESS = `${SECURITY}.*`;\nconst SECURITY_GROUP_ACCESS = `${SECURITY}.group`;\nconst SECURITY_TEAM_ACCESS = `${SECURITY}.team`;\nconst SECURITY_API_KEY_ACCESS = `${SECURITY}.apiKey`;\nconst FULL_ACCESS = \"full\";\nconst NO_ACCESS = \"no\";\nconst CUSTOM_ACCESS = \"custom\";\n\ninterface SecurityPermissionsProps {\n value: SecurityPermission[];\n onChange: (value: SecurityPermission[]) => void;\n}\n\nexport const SecurityPermissions = ({ value, onChange }: SecurityPermissionsProps) => {\n const { getPermission } = useSecurity();\n const wcp = useWcp();\n\n // We disable form elements for custom permissions if AACL cannot be used.\n const cannotUseAacl = useMemo(() => {\n return !getPermission<AaclPermission>(\"aacl\", true);\n }, []);\n\n const teams = wcp.canUseTeams();\n\n const onFormChange = useCallback(\n (formData: SecurityPermission) => {\n let newValue: SecurityPermission[] = [];\n if (Array.isArray(value)) {\n // Let's just filter out the `security*` permission objects, it's easier to build new ones from scratch.\n newValue = value.filter(item => !item.name.startsWith(SECURITY));\n }\n\n const permissions = [];\n if (formData.accessLevel === FULL_ACCESS) {\n permissions.push({ name: SECURITY_FULL_ACCESS });\n } else if (formData.accessLevel === CUSTOM_ACCESS) {\n if (formData.groupAccessScope === FULL_ACCESS) {\n permissions.push({ name: SECURITY_GROUP_ACCESS });\n }\n\n if (formData.teamAccessScope === FULL_ACCESS) {\n permissions.push({ name: SECURITY_TEAM_ACCESS });\n }\n\n if (formData.apiKeyAccessScope === FULL_ACCESS) {\n permissions.push({ name: SECURITY_API_KEY_ACCESS });\n }\n }\n\n if (permissions && permissions.length) {\n newValue.push(...permissions);\n }\n\n onChange(newValue);\n },\n [value]\n );\n\n const formData = useMemo(() => {\n if (!Array.isArray(value)) {\n return { accessLevel: NO_ACCESS };\n }\n\n const hasFullAccess = value.find(\n item => item.name === SECURITY_FULL_ACCESS || item.name === \"*\"\n );\n\n if (hasFullAccess) {\n return { accessLevel: FULL_ACCESS };\n }\n\n const permissions = value.filter(item => item.name.startsWith(SECURITY));\n if (permissions.length === 0) {\n return { accessLevel: NO_ACCESS };\n }\n\n const data = {\n accessLevel: CUSTOM_ACCESS,\n groupAccessScope: NO_ACCESS,\n teamAccessScope: NO_ACCESS,\n apiKeyAccessScope: NO_ACCESS\n };\n\n const hasGroupAccess = permissions.find(item => item.name === SECURITY_GROUP_ACCESS);\n if (hasGroupAccess) {\n data.groupAccessScope = FULL_ACCESS;\n }\n const hasTeamAccess = permissions.find(item => item.name === SECURITY_TEAM_ACCESS);\n if (hasTeamAccess) {\n data.teamAccessScope = FULL_ACCESS;\n }\n\n const hasApiKeyAccess = permissions.find(item => item.name === SECURITY_API_KEY_ACCESS);\n if (hasApiKeyAccess) {\n data.apiKeyAccessScope = FULL_ACCESS;\n }\n\n return data;\n }, []);\n\n return (\n <Form data={formData} onChange={onFormChange}>\n {({ data, Bind }) => {\n return (\n <Fragment>\n <Grid className={gridWithPaddingClass}>\n <Cell span={12}>\n {data.accessLevel === \"custom\" && cannotUseAacl && (\n <CannotUseAaclAlert />\n )}\n </Cell>\n </Grid>\n <Grid className={gridWithPaddingClass}>\n <Cell span={6}>\n <PermissionInfo title={t`Access Level`} />\n </Cell>\n <Cell span={6}>\n <Bind name={\"accessLevel\"}>\n <Select>\n <option value={NO_ACCESS}>{t`No access`}</option>\n <option value={FULL_ACCESS}>{t`Full access`}</option>\n <option value={CUSTOM_ACCESS}>{t`Custom access`}</option>\n </Select>\n </Bind>\n </Cell>\n </Grid>\n {data.accessLevel === CUSTOM_ACCESS && (\n <div className={\"wby-mt-lg\"}>\n <PermissionsGroup title={t`API Keys`}>\n <Grid>\n <Cell span={12}>\n <Bind name={\"apiKeyAccessScope\"}>\n <Select\n label={t`Access Scope`}\n disabled={cannotUseAacl}\n >\n <option\n value={NO_ACCESS}\n >{t`No access`}</option>\n <option\n value={FULL_ACCESS}\n >{t`Full access`}</option>\n </Select>\n </Bind>\n </Cell>\n </Grid>\n </PermissionsGroup>\n <PermissionsGroup title={t`Roles`}>\n <Grid>\n <Cell span={12}>\n <Bind name={\"groupAccessScope\"}>\n <Select\n label={t`Access Scope`}\n disabled={cannotUseAacl}\n >\n <option\n value={NO_ACCESS}\n >{t`No access`}</option>\n <option\n value={FULL_ACCESS}\n >{t`Full access`}</option>\n </Select>\n </Bind>\n </Cell>\n </Grid>\n </PermissionsGroup>\n {teams && (\n <PermissionsGroup title={t`Teams`}>\n <Grid>\n <Cell span={12}>\n <Bind name={\"teamAccessScope\"}>\n <Select\n label={t`Access Scope`}\n disabled={cannotUseAacl}\n >\n <option\n value={NO_ACCESS}\n >{t`No access`}</option>\n <option\n value={FULL_ACCESS}\n >{t`Full access`}</option>\n </Select>\n </Bind>\n </Cell>\n </Grid>\n </PermissionsGroup>\n )}\n </div>\n )}\n </Fragment>\n );\n }}\n </Form>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,21 +1,22 @@
1
- import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
2
-
3
- var _templateObject, _templateObject2;
4
-
5
1
  import React from "react";
6
2
  import { i18n } from "@webiny/app/i18n";
7
- import { AccordionItem } from "@webiny/ui/Accordion";
8
- import { ReactComponent as SecurityIcon } from "@svgr/webpack!@webiny/app-admin/assets/icons/baseline-security-24px.svg";
3
+ import { Accordion } from "@webiny/admin-ui";
4
+ import { ReactComponent as PermissionsIcon } from "@webiny/icons/security.svg";
9
5
  import { SecurityPermissions } from "./SecurityPermissions";
10
6
  import { PermissionRendererPlugin } from "@webiny/app-admin/plugins/PermissionRendererPlugin";
11
- var t = i18n.ns("app-security-admin-users/plugins/permissionRenderer");
7
+ const t = i18n.ns("app-security-admin-users/plugins/permissionRenderer");
12
8
  export default new PermissionRendererPlugin({
13
- render: function render(props) {
14
- return /*#__PURE__*/React.createElement(AccordionItem, {
15
- icon: /*#__PURE__*/React.createElement(SecurityIcon, null),
16
- title: t(_templateObject || (_templateObject = _taggedTemplateLiteral(["Security"]))),
17
- description: t(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["Manage Security app access permissions."]))),
9
+ render(props) {
10
+ return /*#__PURE__*/React.createElement(Accordion.Item, {
11
+ icon: /*#__PURE__*/React.createElement(Accordion.Item.Icon, {
12
+ icon: /*#__PURE__*/React.createElement(PermissionsIcon, null),
13
+ label: "Security Permissions"
14
+ }),
15
+ title: t`Security`,
16
+ description: t`Manage Security app access permissions.`,
18
17
  "data-testid": "permission.security"
19
18
  }, /*#__PURE__*/React.createElement(SecurityPermissions, props));
20
19
  }
21
- });
20
+ });
21
+
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","i18n","Accordion","ReactComponent","PermissionsIcon","SecurityPermissions","PermissionRendererPlugin","t","ns","render","props","createElement","Item","icon","Icon","label","title","description"],"sources":["index.tsx"],"sourcesContent":["import React from \"react\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { Accordion } from \"@webiny/admin-ui\";\nimport { ReactComponent as PermissionsIcon } from \"@webiny/icons/security.svg\";\nimport { SecurityPermissions } from \"./SecurityPermissions\";\nimport { PermissionRendererPlugin } from \"@webiny/app-admin/plugins/PermissionRendererPlugin\";\n\nconst t = i18n.ns(\"app-security-admin-users/plugins/permissionRenderer\");\n\nexport default new PermissionRendererPlugin({\n render(props) {\n return (\n <Accordion.Item\n icon={\n <Accordion.Item.Icon\n icon={<PermissionsIcon />}\n label={\"Security Permissions\"}\n />\n }\n title={t`Security`}\n description={t`Manage Security app access permissions.`}\n data-testid={\"permission.security\"}\n >\n <SecurityPermissions {...props} />\n </Accordion.Item>\n );\n }\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,kBAAkB;AACvC,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,SAASC,cAAc,IAAIC,eAAe,QAAQ,4BAA4B;AAC9E,SAASC,mBAAmB;AAC5B,SAASC,wBAAwB,QAAQ,oDAAoD;AAE7F,MAAMC,CAAC,GAAGN,IAAI,CAACO,EAAE,CAAC,qDAAqD,CAAC;AAExE,eAAe,IAAIF,wBAAwB,CAAC;EACxCG,MAAMA,CAACC,KAAK,EAAE;IACV,oBACIV,KAAA,CAAAW,aAAA,CAACT,SAAS,CAACU,IAAI;MACXC,IAAI,eACAb,KAAA,CAAAW,aAAA,CAACT,SAAS,CAACU,IAAI,CAACE,IAAI;QAChBD,IAAI,eAAEb,KAAA,CAAAW,aAAA,CAACP,eAAe,MAAE,CAAE;QAC1BW,KAAK,EAAE;MAAuB,CACjC,CACJ;MACDC,KAAK,EAAET,CAAC,UAAW;MACnBU,WAAW,EAAEV,CAAC,yCAA0C;MACxD,eAAa;IAAsB,gBAEnCP,KAAA,CAAAW,aAAA,CAACN,mBAAmB,EAAKK,KAAQ,CACrB,CAAC;EAEzB;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -1,3 +1,3 @@
1
- import { RoutePlugin } from "@webiny/app/types";
1
+ import type { RoutePlugin } from "@webiny/app/types";
2
2
  declare const plugins: RoutePlugin[];
3
3
  export default plugins;
package/plugins/routes.js CHANGED
@@ -6,19 +6,17 @@ import { SecureRoute } from "@webiny/app-security/components";
6
6
  import { Groups } from "../ui/views/Groups";
7
7
  import { ApiKeys } from "../ui/views/ApiKeys";
8
8
  import { Permission } from "./constants";
9
- var plugins = [{
9
+ const plugins = [{
10
10
  name: "route-security-groups",
11
11
  type: "route",
12
12
  route: /*#__PURE__*/React.createElement(Route, {
13
13
  exact: true,
14
14
  path: "/access-management/groups",
15
- render: function render() {
16
- return /*#__PURE__*/React.createElement(SecureRoute, {
17
- permission: Permission.Groups
18
- }, /*#__PURE__*/React.createElement(AdminLayout, null, /*#__PURE__*/React.createElement(Helmet, {
19
- title: "Access Management - Groups"
20
- }), /*#__PURE__*/React.createElement(Groups, null)));
21
- }
15
+ render: () => /*#__PURE__*/React.createElement(SecureRoute, {
16
+ permission: Permission.Groups
17
+ }, /*#__PURE__*/React.createElement(AdminLayout, null, /*#__PURE__*/React.createElement(Helmet, {
18
+ title: "Access Management - Groups"
19
+ }), /*#__PURE__*/React.createElement(Groups, null)))
22
20
  })
23
21
  }, {
24
22
  name: "route-security-api-keys",
@@ -26,13 +24,13 @@ var plugins = [{
26
24
  route: /*#__PURE__*/React.createElement(Route, {
27
25
  exact: true,
28
26
  path: "/access-management/api-keys",
29
- render: function render() {
30
- return /*#__PURE__*/React.createElement(SecureRoute, {
31
- permission: Permission.ApiKeys
32
- }, /*#__PURE__*/React.createElement(AdminLayout, {
33
- title: "Access Management - API Keys"
34
- }, /*#__PURE__*/React.createElement(ApiKeys, null)));
35
- }
27
+ render: () => /*#__PURE__*/React.createElement(SecureRoute, {
28
+ permission: Permission.ApiKeys
29
+ }, /*#__PURE__*/React.createElement(AdminLayout, {
30
+ title: "Access Management - API Keys"
31
+ }, /*#__PURE__*/React.createElement(ApiKeys, null)))
36
32
  })
37
33
  }];
38
- export default plugins;
34
+ export default plugins;
35
+
36
+ //# sourceMappingURL=routes.js.map