@webiny/app-security-access-management 5.43.2 → 6.0.0-alpha.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.
- package/components/GroupAutocomplete/graphql.js +16 -11
- package/components/GroupAutocomplete/graphql.js.map +1 -1
- package/components/GroupAutocomplete/index.js +11 -17
- package/components/GroupAutocomplete/index.js.map +1 -1
- package/components/GroupsMultiAutocomplete/graphql.js +21 -11
- package/components/GroupsMultiAutocomplete/graphql.js.map +1 -1
- package/components/GroupsMultiAutocomplete/index.js +11 -17
- package/components/GroupsMultiAutocomplete/index.js.map +1 -1
- package/components/NotAuthorizedError/NotAuthorizedError.js +18 -61
- package/components/NotAuthorizedError/NotAuthorizedError.js.map +1 -1
- package/components/NotAuthorizedError/index.js +1 -12
- package/components/NotAuthorizedError/index.js.map +1 -1
- package/components/TeamAutocomplete/graphql.js +16 -11
- package/components/TeamAutocomplete/graphql.js.map +1 -1
- package/components/TeamAutocomplete/index.js +11 -17
- package/components/TeamAutocomplete/index.js.map +1 -1
- package/components/TeamsMultiAutocomplete/graphql.js +21 -11
- package/components/TeamsMultiAutocomplete/graphql.js.map +1 -1
- package/components/TeamsMultiAutocomplete/index.js +11 -17
- package/components/TeamsMultiAutocomplete/index.js.map +1 -1
- package/index.d.ts +0 -7
- package/index.js +80 -71
- package/index.js.map +1 -1
- package/package.json +13 -13
- package/plugins/constants.js +1 -7
- package/plugins/constants.js.map +1 -1
- package/plugins/index.js +4 -13
- package/plugins/index.js.map +1 -1
- package/plugins/installation.js +61 -50
- package/plugins/installation.js.map +1 -1
- package/plugins/permissionRenderer/SecurityPermissions.js +84 -127
- package/plugins/permissionRenderer/SecurityPermissions.js.map +1 -1
- package/plugins/permissionRenderer/index.js +17 -23
- package/plugins/permissionRenderer/index.js.map +1 -1
- package/plugins/routes.js +22 -33
- package/plugins/routes.js.map +1 -1
- package/plugins/secureRouteError.js +6 -13
- package/plugins/secureRouteError.js.map +1 -1
- package/types.js +1 -5
- package/ui/elements/GroupAutocompleteElement.js +29 -45
- package/ui/elements/GroupAutocompleteElement.js.map +1 -1
- package/ui/elements/GroupsMultiAutocompleteElement.js +29 -45
- package/ui/elements/GroupsMultiAutocompleteElement.js.map +1 -1
- package/ui/elements/TeamAutocompleteElement.js +29 -45
- package/ui/elements/TeamAutocompleteElement.js.map +1 -1
- package/ui/views/ApiKeys/ApiKeyForm.js +137 -200
- package/ui/views/ApiKeys/ApiKeyForm.js.map +1 -1
- package/ui/views/ApiKeys/ApiKeys.js +9 -17
- package/ui/views/ApiKeys/ApiKeys.js.map +1 -1
- package/ui/views/ApiKeys/ApiKeysDataList.js +110 -134
- package/ui/views/ApiKeys/ApiKeysDataList.js.map +1 -1
- package/ui/views/ApiKeys/graphql.js +80 -16
- package/ui/views/ApiKeys/graphql.js.map +1 -1
- package/ui/views/ApiKeys/index.js +1 -16
- package/ui/views/ApiKeys/index.js.map +1 -1
- package/ui/views/ApiKeys/utils.js +3 -11
- package/ui/views/ApiKeys/utils.js.map +1 -1
- package/ui/views/Groups/Groups.js +9 -17
- package/ui/views/Groups/Groups.js.map +1 -1
- package/ui/views/Groups/GroupsDataList.js +114 -141
- package/ui/views/Groups/GroupsDataList.js.map +1 -1
- package/ui/views/Groups/GroupsForm.js +139 -188
- package/ui/views/Groups/GroupsForm.js.map +1 -1
- package/ui/views/Groups/graphql.js +83 -16
- package/ui/views/Groups/graphql.js.map +1 -1
- package/ui/views/Groups/index.js +1 -16
- package/ui/views/Groups/index.js.map +1 -1
- package/ui/views/Teams/Teams.js +9 -17
- package/ui/views/Teams/Teams.js.map +1 -1
- package/ui/views/Teams/TeamsDataList.js +116 -141
- package/ui/views/Teams/TeamsDataList.js.map +1 -1
- package/ui/views/Teams/TeamsForm.js +118 -150
- package/ui/views/Teams/TeamsForm.js.map +1 -1
- package/ui/views/Teams/graphql.js +87 -16
- package/ui/views/Teams/graphql.js.map +1 -1
- package/ui/views/Teams/index.js +1 -16
- package/ui/views/Teams/index.js.map +1 -1
- package/ui/views/utils.js +3 -14
- package/ui/views/utils.js.map +1 -1
|
@@ -1,53 +1,41 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
var SECURITY_API_KEY_ACCESS = "".concat(SECURITY, ".apiKey");
|
|
27
|
-
var FULL_ACCESS = "full";
|
|
28
|
-
var NO_ACCESS = "no";
|
|
29
|
-
var CUSTOM_ACCESS = "custom";
|
|
30
|
-
var SecurityPermissions = exports.SecurityPermissions = function SecurityPermissions(_ref) {
|
|
31
|
-
var value = _ref.value,
|
|
32
|
-
onChange = _ref.onChange;
|
|
33
|
-
var _useSecurity = (0, _appSecurity.useSecurity)(),
|
|
34
|
-
getPermission = _useSecurity.getPermission;
|
|
35
|
-
var wcp = (0, _appAdmin.useWcp)();
|
|
1
|
+
import React, { Fragment, useCallback, useMemo } from "react";
|
|
2
|
+
import { Grid, Cell } from "@webiny/ui/Grid";
|
|
3
|
+
import { Select } from "@webiny/ui/Select";
|
|
4
|
+
import { i18n } from "@webiny/app/i18n";
|
|
5
|
+
import { CannotUseAaclAlert, PermissionInfo, gridWithPaddingClass, PermissionsGroup } from "@webiny/app-admin/components/Permissions";
|
|
6
|
+
import { Form } from "@webiny/form";
|
|
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();
|
|
36
26
|
|
|
37
27
|
// We disable form elements for custom permissions if AACL cannot be used.
|
|
38
|
-
|
|
28
|
+
const cannotUseAacl = useMemo(() => {
|
|
39
29
|
return !getPermission("aacl", true);
|
|
40
30
|
}, []);
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
31
|
+
const teams = wcp.canUseTeams();
|
|
32
|
+
const onFormChange = useCallback(formData => {
|
|
33
|
+
let newValue = [];
|
|
44
34
|
if (Array.isArray(value)) {
|
|
45
35
|
// Let's just filter out the `security*` permission objects, it's easier to build new ones from scratch.
|
|
46
|
-
newValue = value.filter(
|
|
47
|
-
return !item.name.startsWith(SECURITY);
|
|
48
|
-
});
|
|
36
|
+
newValue = value.filter(item => !item.name.startsWith(SECURITY));
|
|
49
37
|
}
|
|
50
|
-
|
|
38
|
+
const permissions = [];
|
|
51
39
|
if (formData.accessLevel === FULL_ACCESS) {
|
|
52
40
|
permissions.push({
|
|
53
41
|
name: SECURITY_FULL_ACCESS
|
|
@@ -70,148 +58,117 @@ var SecurityPermissions = exports.SecurityPermissions = function SecurityPermiss
|
|
|
70
58
|
}
|
|
71
59
|
}
|
|
72
60
|
if (permissions && permissions.length) {
|
|
73
|
-
|
|
74
|
-
(_newValue = newValue).push.apply(_newValue, permissions);
|
|
61
|
+
newValue.push(...permissions);
|
|
75
62
|
}
|
|
76
63
|
onChange(newValue);
|
|
77
64
|
}, [value]);
|
|
78
|
-
|
|
65
|
+
const formData = useMemo(() => {
|
|
79
66
|
if (!Array.isArray(value)) {
|
|
80
67
|
return {
|
|
81
68
|
accessLevel: NO_ACCESS
|
|
82
69
|
};
|
|
83
70
|
}
|
|
84
|
-
|
|
85
|
-
return item.name === SECURITY_FULL_ACCESS || item.name === "*";
|
|
86
|
-
});
|
|
71
|
+
const hasFullAccess = value.find(item => item.name === SECURITY_FULL_ACCESS || item.name === "*");
|
|
87
72
|
if (hasFullAccess) {
|
|
88
73
|
return {
|
|
89
74
|
accessLevel: FULL_ACCESS
|
|
90
75
|
};
|
|
91
76
|
}
|
|
92
|
-
|
|
93
|
-
return item.name.startsWith(SECURITY);
|
|
94
|
-
});
|
|
77
|
+
const permissions = value.filter(item => item.name.startsWith(SECURITY));
|
|
95
78
|
if (permissions.length === 0) {
|
|
96
79
|
return {
|
|
97
80
|
accessLevel: NO_ACCESS
|
|
98
81
|
};
|
|
99
82
|
}
|
|
100
|
-
|
|
83
|
+
const data = {
|
|
101
84
|
accessLevel: CUSTOM_ACCESS,
|
|
102
85
|
groupAccessScope: NO_ACCESS,
|
|
103
86
|
teamAccessScope: NO_ACCESS,
|
|
104
87
|
apiKeyAccessScope: NO_ACCESS
|
|
105
88
|
};
|
|
106
|
-
|
|
107
|
-
return item.name === SECURITY_GROUP_ACCESS;
|
|
108
|
-
});
|
|
89
|
+
const hasGroupAccess = permissions.find(item => item.name === SECURITY_GROUP_ACCESS);
|
|
109
90
|
if (hasGroupAccess) {
|
|
110
91
|
data.groupAccessScope = FULL_ACCESS;
|
|
111
92
|
}
|
|
112
|
-
|
|
113
|
-
return item.name === SECURITY_TEAM_ACCESS;
|
|
114
|
-
});
|
|
93
|
+
const hasTeamAccess = permissions.find(item => item.name === SECURITY_TEAM_ACCESS);
|
|
115
94
|
if (hasTeamAccess) {
|
|
116
95
|
data.teamAccessScope = FULL_ACCESS;
|
|
117
96
|
}
|
|
118
|
-
|
|
119
|
-
return item.name === SECURITY_API_KEY_ACCESS;
|
|
120
|
-
});
|
|
97
|
+
const hasApiKeyAccess = permissions.find(item => item.name === SECURITY_API_KEY_ACCESS);
|
|
121
98
|
if (hasApiKeyAccess) {
|
|
122
99
|
data.apiKeyAccessScope = FULL_ACCESS;
|
|
123
100
|
}
|
|
124
101
|
return data;
|
|
125
102
|
}, []);
|
|
126
|
-
return /*#__PURE__*/
|
|
103
|
+
return /*#__PURE__*/React.createElement(Form, {
|
|
127
104
|
data: formData,
|
|
128
105
|
onChange: onFormChange
|
|
129
|
-
},
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
106
|
+
}, ({
|
|
107
|
+
data,
|
|
108
|
+
Bind
|
|
109
|
+
}) => {
|
|
110
|
+
return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(Grid, {
|
|
111
|
+
className: gridWithPaddingClass
|
|
112
|
+
}, /*#__PURE__*/React.createElement(Cell, {
|
|
135
113
|
span: 12
|
|
136
|
-
}, data.accessLevel === "custom" && cannotUseAacl && /*#__PURE__*/
|
|
137
|
-
className:
|
|
138
|
-
}, /*#__PURE__*/
|
|
114
|
+
}, data.accessLevel === "custom" && cannotUseAacl && /*#__PURE__*/React.createElement(CannotUseAaclAlert, null))), /*#__PURE__*/React.createElement(Grid, {
|
|
115
|
+
className: gridWithPaddingClass
|
|
116
|
+
}, /*#__PURE__*/React.createElement(Cell, {
|
|
139
117
|
span: 6
|
|
140
|
-
}, /*#__PURE__*/
|
|
141
|
-
title: t
|
|
142
|
-
})), /*#__PURE__*/
|
|
118
|
+
}, /*#__PURE__*/React.createElement(PermissionInfo, {
|
|
119
|
+
title: t`Access Level`
|
|
120
|
+
})), /*#__PURE__*/React.createElement(Cell, {
|
|
143
121
|
span: 6
|
|
144
|
-
}, /*#__PURE__*/
|
|
122
|
+
}, /*#__PURE__*/React.createElement(Bind, {
|
|
145
123
|
name: "accessLevel"
|
|
146
|
-
}, /*#__PURE__*/
|
|
147
|
-
label: t(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["Access Level"])))
|
|
148
|
-
}, /*#__PURE__*/_react.default.createElement("option", {
|
|
124
|
+
}, /*#__PURE__*/React.createElement(Select, null, /*#__PURE__*/React.createElement("option", {
|
|
149
125
|
value: NO_ACCESS
|
|
150
|
-
}, t
|
|
126
|
+
}, t`No access`), /*#__PURE__*/React.createElement("option", {
|
|
151
127
|
value: FULL_ACCESS
|
|
152
|
-
}, t
|
|
128
|
+
}, t`Full access`), /*#__PURE__*/React.createElement("option", {
|
|
153
129
|
value: CUSTOM_ACCESS
|
|
154
|
-
}, t
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
}, /*#__PURE__*/_react.default.createElement(_Grid.Grid, null, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
160
|
-
span: 12
|
|
161
|
-
}, /*#__PURE__*/_react.default.createElement(_Typography.Typography, {
|
|
162
|
-
use: "overline"
|
|
163
|
-
}, t(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2.default)(["API Keys"]))))), /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
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`
|
|
134
|
+
}, /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Cell, {
|
|
164
135
|
span: 12
|
|
165
|
-
}, /*#__PURE__*/
|
|
136
|
+
}, /*#__PURE__*/React.createElement(Bind, {
|
|
166
137
|
name: "apiKeyAccessScope"
|
|
167
|
-
}, /*#__PURE__*/
|
|
168
|
-
label: t
|
|
138
|
+
}, /*#__PURE__*/React.createElement(Select, {
|
|
139
|
+
label: t`Access Scope`,
|
|
169
140
|
disabled: cannotUseAacl
|
|
170
|
-
}, /*#__PURE__*/
|
|
141
|
+
}, /*#__PURE__*/React.createElement("option", {
|
|
171
142
|
value: NO_ACCESS
|
|
172
|
-
}, t
|
|
143
|
+
}, t`No access`), /*#__PURE__*/React.createElement("option", {
|
|
173
144
|
value: FULL_ACCESS
|
|
174
|
-
}, t
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
marginTop: 10
|
|
178
|
-
}
|
|
179
|
-
}, /*#__PURE__*/_react.default.createElement(_Grid.Grid, null, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
180
|
-
span: 12
|
|
181
|
-
}, /*#__PURE__*/_react.default.createElement(_Typography.Typography, {
|
|
182
|
-
use: "overline"
|
|
183
|
-
}, t(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2.default)(["Roles"]))))), /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
145
|
+
}, t`Full access`)))))), /*#__PURE__*/React.createElement(PermissionsGroup, {
|
|
146
|
+
title: t`Roles`
|
|
147
|
+
}, /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Cell, {
|
|
184
148
|
span: 12
|
|
185
|
-
}, /*#__PURE__*/
|
|
149
|
+
}, /*#__PURE__*/React.createElement(Bind, {
|
|
186
150
|
name: "groupAccessScope"
|
|
187
|
-
}, /*#__PURE__*/
|
|
188
|
-
label: t
|
|
151
|
+
}, /*#__PURE__*/React.createElement(Select, {
|
|
152
|
+
label: t`Access Scope`,
|
|
189
153
|
disabled: cannotUseAacl
|
|
190
|
-
}, /*#__PURE__*/
|
|
154
|
+
}, /*#__PURE__*/React.createElement("option", {
|
|
191
155
|
value: NO_ACCESS
|
|
192
|
-
}, t
|
|
156
|
+
}, t`No access`), /*#__PURE__*/React.createElement("option", {
|
|
193
157
|
value: FULL_ACCESS
|
|
194
|
-
}, t
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
marginTop: 10
|
|
198
|
-
}
|
|
199
|
-
}, /*#__PURE__*/_react.default.createElement(_Grid.Grid, null, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
200
|
-
span: 12
|
|
201
|
-
}, /*#__PURE__*/_react.default.createElement(_Typography.Typography, {
|
|
202
|
-
use: "overline"
|
|
203
|
-
}, t(_templateObject14 || (_templateObject14 = (0, _taggedTemplateLiteral2.default)(["Teams"]))))), /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
158
|
+
}, t`Full access`)))))), teams && /*#__PURE__*/React.createElement(PermissionsGroup, {
|
|
159
|
+
title: t`Teams`
|
|
160
|
+
}, /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Cell, {
|
|
204
161
|
span: 12
|
|
205
|
-
}, /*#__PURE__*/
|
|
162
|
+
}, /*#__PURE__*/React.createElement(Bind, {
|
|
206
163
|
name: "teamAccessScope"
|
|
207
|
-
}, /*#__PURE__*/
|
|
208
|
-
label: t
|
|
164
|
+
}, /*#__PURE__*/React.createElement(Select, {
|
|
165
|
+
label: t`Access Scope`,
|
|
209
166
|
disabled: cannotUseAacl
|
|
210
|
-
}, /*#__PURE__*/
|
|
167
|
+
}, /*#__PURE__*/React.createElement("option", {
|
|
211
168
|
value: NO_ACCESS
|
|
212
|
-
}, t
|
|
169
|
+
}, t`No access`), /*#__PURE__*/React.createElement("option", {
|
|
213
170
|
value: FULL_ACCESS
|
|
214
|
-
}, t
|
|
171
|
+
}, t`Full access`))))))));
|
|
215
172
|
});
|
|
216
173
|
};
|
|
217
174
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_Grid","_Select","_i18n","_Permissions","_form","_Elevation","_Typography","_appSecurity","_appAdmin","_templateObject","_templateObject2","_templateObject3","_templateObject4","_templateObject5","_templateObject6","_templateObject7","_templateObject8","_templateObject9","_templateObject10","_templateObject11","_templateObject12","_templateObject13","_templateObject14","_templateObject15","_templateObject16","_templateObject17","t","i18n","ns","SECURITY","SECURITY_FULL_ACCESS","concat","SECURITY_GROUP_ACCESS","SECURITY_TEAM_ACCESS","SECURITY_API_KEY_ACCESS","FULL_ACCESS","NO_ACCESS","CUSTOM_ACCESS","SecurityPermissions","exports","_ref","value","onChange","_useSecurity","useSecurity","getPermission","wcp","useWcp","cannotUseAacl","useMemo","teams","canUseTeams","onFormChange","useCallback","formData","newValue","Array","isArray","filter","item","name","startsWith","permissions","accessLevel","push","groupAccessScope","teamAccessScope","apiKeyAccessScope","length","_newValue","apply","hasFullAccess","find","data","hasGroupAccess","hasTeamAccess","hasApiKeyAccess","default","createElement","Form","_ref2","Bind","Fragment","Grid","className","gridNoPaddingClass","Cell","span","CannotUseAaclAlert","PermissionInfo","title","_taggedTemplateLiteral2","Select","label","Elevation","z","style","marginTop","Typography","use","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 gridNoPaddingClass\n} from \"@webiny/app-admin/components/Permissions\";\nimport { Form } from \"@webiny/form\";\nimport { Elevation } from \"@webiny/ui/Elevation\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport { SecurityPermission } from \"@webiny/app-security/types\";\nimport { useSecurity } from \"@webiny/app-security\";\nimport { AaclPermission, 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={gridNoPaddingClass}>\n <Cell span={12}>\n {data.accessLevel === \"custom\" && cannotUseAacl && (\n <CannotUseAaclAlert />\n )}\n </Cell>\n </Grid>\n <Grid className={gridNoPaddingClass}>\n <Cell span={6}>\n <PermissionInfo title={t`Access Level`} />\n </Cell>\n <Cell span={6}>\n <Bind name={\"accessLevel\"}>\n <Select label={t`Access Level`}>\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 <React.Fragment>\n <Elevation z={1} style={{ marginTop: 10 }}>\n <Grid>\n <Cell span={12}>\n <Typography use={\"overline\"}>{t`API Keys`}</Typography>\n </Cell>\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 </Elevation>\n <Elevation z={1} style={{ marginTop: 10 }}>\n <Grid>\n <Cell span={12}>\n <Typography use={\"overline\"}>{t`Roles`}</Typography>\n </Cell>\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 </Elevation>\n {teams && (\n <Elevation z={1} style={{ marginTop: 10 }}>\n <Grid>\n <Cell span={12}>\n <Typography use={\"overline\"}>{t`Teams`}</Typography>\n </Cell>\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 </Elevation>\n )}\n </React.Fragment>\n )}\n </Fragment>\n );\n }}\n </Form>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
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 { SecurityPermission } from \"@webiny/app-security/types\";\nimport { useSecurity } from \"@webiny/app-security\";\nimport { AaclPermission, 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,27 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
var _default = exports.default = new _PermissionRendererPlugin.PermissionRendererPlugin({
|
|
18
|
-
render: function render(props) {
|
|
19
|
-
return /*#__PURE__*/_react.default.createElement(_Accordion.AccordionItem, {
|
|
20
|
-
icon: /*#__PURE__*/_react.default.createElement(_baselineSecurity24px.ReactComponent, null),
|
|
21
|
-
title: t(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["Security"]))),
|
|
22
|
-
description: t(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["Manage Security app access permissions."]))),
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { i18n } from "@webiny/app/i18n";
|
|
3
|
+
import { Accordion } from "@webiny/admin-ui";
|
|
4
|
+
import { ReactComponent as PermissionsIcon } from "@webiny/icons/security.svg";
|
|
5
|
+
import { SecurityPermissions } from "./SecurityPermissions";
|
|
6
|
+
import { PermissionRendererPlugin } from "@webiny/app-admin/plugins/PermissionRendererPlugin";
|
|
7
|
+
const t = i18n.ns("app-security-admin-users/plugins/permissionRenderer");
|
|
8
|
+
export default new PermissionRendererPlugin({
|
|
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.`,
|
|
23
17
|
"data-testid": "permission.security"
|
|
24
|
-
}, /*#__PURE__*/
|
|
18
|
+
}, /*#__PURE__*/React.createElement(SecurityPermissions, props));
|
|
25
19
|
}
|
|
26
20
|
});
|
|
27
21
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
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":[]}
|
package/plugins/routes.js
CHANGED
|
@@ -1,47 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
var _reactRouter = require("@webiny/react-router");
|
|
11
|
-
var _AdminLayout = require("@webiny/app-admin/components/AdminLayout");
|
|
12
|
-
var _components = require("@webiny/app-security/components");
|
|
13
|
-
var _Groups = require("../ui/views/Groups");
|
|
14
|
-
var _ApiKeys = require("../ui/views/ApiKeys");
|
|
15
|
-
var _constants = require("./constants");
|
|
16
|
-
var plugins = [{
|
|
1
|
+
import React from "react";
|
|
2
|
+
import Helmet from "react-helmet";
|
|
3
|
+
import { Route } from "@webiny/react-router";
|
|
4
|
+
import { AdminLayout } from "@webiny/app-admin/components/AdminLayout";
|
|
5
|
+
import { SecureRoute } from "@webiny/app-security/components";
|
|
6
|
+
import { Groups } from "../ui/views/Groups";
|
|
7
|
+
import { ApiKeys } from "../ui/views/ApiKeys";
|
|
8
|
+
import { Permission } from "./constants";
|
|
9
|
+
const plugins = [{
|
|
17
10
|
name: "route-security-groups",
|
|
18
11
|
type: "route",
|
|
19
|
-
route: /*#__PURE__*/
|
|
12
|
+
route: /*#__PURE__*/React.createElement(Route, {
|
|
20
13
|
exact: true,
|
|
21
14
|
path: "/access-management/groups",
|
|
22
|
-
render:
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}), /*#__PURE__*/_react.default.createElement(_Groups.Groups, null)));
|
|
28
|
-
}
|
|
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)))
|
|
29
20
|
})
|
|
30
21
|
}, {
|
|
31
22
|
name: "route-security-api-keys",
|
|
32
23
|
type: "route",
|
|
33
|
-
route: /*#__PURE__*/
|
|
24
|
+
route: /*#__PURE__*/React.createElement(Route, {
|
|
34
25
|
exact: true,
|
|
35
26
|
path: "/access-management/api-keys",
|
|
36
|
-
render:
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}, /*#__PURE__*/_react.default.createElement(_ApiKeys.ApiKeys, null)));
|
|
42
|
-
}
|
|
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)))
|
|
43
32
|
})
|
|
44
33
|
}];
|
|
45
|
-
|
|
34
|
+
export default plugins;
|
|
46
35
|
|
|
47
36
|
//# sourceMappingURL=routes.js.map
|
package/plugins/routes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["React","Helmet","Route","AdminLayout","SecureRoute","Groups","ApiKeys","Permission","plugins","name","type","route","createElement","exact","path","render","permission","title"],"sources":["routes.tsx"],"sourcesContent":["import React from \"react\";\nimport Helmet from \"react-helmet\";\nimport { Route } from \"@webiny/react-router\";\nimport { AdminLayout } from \"@webiny/app-admin/components/AdminLayout\";\nimport { SecureRoute } from \"@webiny/app-security/components\";\nimport { RoutePlugin } from \"@webiny/app/types\";\nimport { Groups } from \"~/ui/views/Groups\";\nimport { ApiKeys } from \"~/ui/views/ApiKeys\";\nimport { Permission } from \"./constants\";\n\nconst plugins: RoutePlugin[] = [\n {\n name: \"route-security-groups\",\n type: \"route\",\n route: (\n <Route\n exact\n path={\"/access-management/groups\"}\n render={() => (\n <SecureRoute permission={Permission.Groups}>\n <AdminLayout>\n <Helmet title={\"Access Management - Groups\"} />\n <Groups />\n </AdminLayout>\n </SecureRoute>\n )}\n />\n )\n },\n {\n name: \"route-security-api-keys\",\n type: \"route\",\n route: (\n <Route\n exact\n path={\"/access-management/api-keys\"}\n render={() => (\n <SecureRoute permission={Permission.ApiKeys}>\n <AdminLayout title={\"Access Management - API Keys\"}>\n <ApiKeys />\n </AdminLayout>\n </SecureRoute>\n )}\n />\n )\n }\n];\n\nexport default plugins;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,MAAM,MAAM,cAAc;AACjC,SAASC,KAAK,QAAQ,sBAAsB;AAC5C,SAASC,WAAW,QAAQ,0CAA0C;AACtE,SAASC,WAAW,QAAQ,iCAAiC;AAE7D,SAASC,MAAM;AACf,SAASC,OAAO;AAChB,SAASC,UAAU;AAEnB,MAAMC,OAAsB,GAAG,CAC3B;EACIC,IAAI,EAAE,uBAAuB;EAC7BC,IAAI,EAAE,OAAO;EACbC,KAAK,eACDX,KAAA,CAAAY,aAAA,CAACV,KAAK;IACFW,KAAK;IACLC,IAAI,EAAE,2BAA4B;IAClCC,MAAM,EAAEA,CAAA,kBACJf,KAAA,CAAAY,aAAA,CAACR,WAAW;MAACY,UAAU,EAAET,UAAU,CAACF;IAAO,gBACvCL,KAAA,CAAAY,aAAA,CAACT,WAAW,qBACRH,KAAA,CAAAY,aAAA,CAACX,MAAM;MAACgB,KAAK,EAAE;IAA6B,CAAE,CAAC,eAC/CjB,KAAA,CAAAY,aAAA,CAACP,MAAM,MAAE,CACA,CACJ;EACf,CACL;AAET,CAAC,EACD;EACII,IAAI,EAAE,yBAAyB;EAC/BC,IAAI,EAAE,OAAO;EACbC,KAAK,eACDX,KAAA,CAAAY,aAAA,CAACV,KAAK;IACFW,KAAK;IACLC,IAAI,EAAE,6BAA8B;IACpCC,MAAM,EAAEA,CAAA,kBACJf,KAAA,CAAAY,aAAA,CAACR,WAAW;MAACY,UAAU,EAAET,UAAU,CAACD;IAAQ,gBACxCN,KAAA,CAAAY,aAAA,CAACT,WAAW;MAACc,KAAK,EAAE;IAA+B,gBAC/CjB,KAAA,CAAAY,aAAA,CAACN,OAAO,MAAE,CACD,CACJ;EACf,CACL;AAET,CAAC,CACJ;AAED,eAAeE,OAAO","ignoreList":[]}
|
|
@@ -1,19 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.default = void 0;
|
|
8
|
-
var React = _interopRequireWildcard(require("react"));
|
|
9
|
-
var _NotAuthorizedError = require("../components/NotAuthorizedError");
|
|
10
|
-
var plugin = {
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { NotAuthorizedError } from "../components/NotAuthorizedError";
|
|
3
|
+
const plugin = {
|
|
11
4
|
type: "secure-route-error",
|
|
12
5
|
name: "secure-route-error",
|
|
13
|
-
render
|
|
14
|
-
return /*#__PURE__*/React.createElement(
|
|
6
|
+
render() {
|
|
7
|
+
return /*#__PURE__*/React.createElement(NotAuthorizedError, null);
|
|
15
8
|
}
|
|
16
9
|
};
|
|
17
|
-
|
|
10
|
+
export default plugin;
|
|
18
11
|
|
|
19
12
|
//# sourceMappingURL=secureRouteError.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","
|
|
1
|
+
{"version":3,"names":["React","NotAuthorizedError","plugin","type","name","render","createElement"],"sources":["secureRouteError.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Plugin } from \"@webiny/plugins/types\";\nimport { NotAuthorizedError } from \"~/components/NotAuthorizedError\";\n\ntype SecureRouteErrorPlugin = Plugin & { render: () => React.ReactNode };\n\nconst plugin: SecureRouteErrorPlugin = {\n type: \"secure-route-error\",\n name: \"secure-route-error\",\n render(): React.ReactElement {\n return <NotAuthorizedError />;\n }\n};\n\nexport default plugin;\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAASC,kBAAkB;AAI3B,MAAMC,MAA8B,GAAG;EACnCC,IAAI,EAAE,oBAAoB;EAC1BC,IAAI,EAAE,oBAAoB;EAC1BC,MAAMA,CAAA,EAAuB;IACzB,oBAAOL,KAAA,CAAAM,aAAA,CAACL,kBAAkB,MAAE,CAAC;EACjC;AACJ,CAAC;AAED,eAAeC,MAAM","ignoreList":[]}
|