@webiny/app-security-access-management 0.0.0-unstable.c2780f51fe → 0.0.0-unstable.c7dec08bb0
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/GroupsMultiAutocomplete/graphql.d.ts +1 -0
- package/components/GroupsMultiAutocomplete/graphql.js +12 -0
- package/components/GroupsMultiAutocomplete/graphql.js.map +1 -0
- package/components/GroupsMultiAutocomplete/index.d.ts +5 -0
- package/components/GroupsMultiAutocomplete/index.js +24 -0
- package/components/GroupsMultiAutocomplete/index.js.map +1 -0
- package/components/TeamAutocomplete/graphql.d.ts +1 -0
- package/components/TeamAutocomplete/graphql.js +12 -0
- package/components/TeamAutocomplete/graphql.js.map +1 -0
- package/components/TeamAutocomplete/index.d.ts +5 -0
- package/components/TeamAutocomplete/index.js +23 -0
- package/components/TeamAutocomplete/index.js.map +1 -0
- package/index.js +28 -7
- package/index.js.map +1 -1
- package/package.json +25 -23
- package/plugins/constants.d.ts +1 -0
- package/plugins/constants.js +1 -0
- package/plugins/constants.js.map +1 -1
- package/plugins/permissionRenderer/SecurityPermissions.js +60 -5
- package/plugins/permissionRenderer/SecurityPermissions.js.map +1 -1
- package/types.d.ts +7 -0
- package/types.js.map +1 -1
- package/ui/elements/GroupsMultiAutocompleteElement.d.ts +6 -0
- package/ui/elements/GroupsMultiAutocompleteElement.js +49 -0
- package/ui/elements/GroupsMultiAutocompleteElement.js.map +1 -0
- package/ui/elements/TeamAutocompleteElement.d.ts +6 -0
- package/ui/elements/TeamAutocompleteElement.js +49 -0
- package/ui/elements/TeamAutocompleteElement.js.map +1 -0
- package/ui/views/ApiKeys/ApiKeyForm.js +19 -1
- package/ui/views/ApiKeys/ApiKeyForm.js.map +1 -1
- package/ui/views/Groups/GroupsDataList.js +8 -8
- package/ui/views/Groups/GroupsDataList.js.map +1 -1
- package/ui/views/Groups/GroupsForm.js +30 -17
- package/ui/views/Groups/GroupsForm.js.map +1 -1
- package/ui/views/Groups/graphql.js +1 -1
- package/ui/views/Groups/graphql.js.map +1 -1
- package/ui/views/Teams/Teams.d.ts +8 -0
- package/ui/views/Teams/Teams.js +19 -0
- package/ui/views/Teams/Teams.js.map +1 -0
- package/ui/views/Teams/TeamsDataList.d.ts +5 -0
- package/ui/views/Teams/TeamsDataList.js +192 -0
- package/ui/views/Teams/TeamsDataList.js.map +1 -0
- package/ui/views/Teams/TeamsForm.d.ts +5 -0
- package/ui/views/Teams/TeamsForm.js +196 -0
- package/ui/views/Teams/TeamsForm.js.map +1 -0
- package/ui/views/Teams/graphql.d.ts +5 -0
- package/ui/views/Teams/graphql.js +21 -0
- package/ui/views/Teams/graphql.js.map +1 -0
- package/ui/views/Teams/index.d.ts +1 -0
- package/ui/views/Teams/index.js +16 -0
- package/ui/views/Teams/index.js.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const LIST_GROUPS: import("graphql").DocumentNode;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.LIST_GROUPS = void 0;
|
|
8
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
9
|
+
var _graphqlTag = _interopRequireDefault(require("graphql-tag"));
|
|
10
|
+
var _templateObject;
|
|
11
|
+
var LIST_GROUPS = (0, _graphqlTag.default)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n query listGroups {\n security {\n groups: listGroups {\n data {\n id\n slug\n name\n description\n createdOn\n }\n error {\n data\n message\n code\n }\n }\n }\n }\n"])));
|
|
12
|
+
exports.LIST_GROUPS = LIST_GROUPS;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["LIST_GROUPS","gql"],"sources":["graphql.ts"],"sourcesContent":["import gql from \"graphql-tag\";\n\nexport const LIST_GROUPS = gql`\n query listGroups {\n security {\n groups: listGroups {\n data {\n id\n slug\n name\n description\n createdOn\n }\n error {\n data\n message\n code\n }\n }\n }\n }\n`;\n"],"mappings":";;;;;;;;AAAA;AAA8B;AAEvB,IAAMA,WAAW,OAAGC,mBAAG,yfAmB7B;AAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { MultiAutoCompleteProps } from "@webiny/ui/AutoComplete";
|
|
3
|
+
declare type GroupsMultiAutocompleteProps = Partial<MultiAutoCompleteProps>;
|
|
4
|
+
export declare const GroupsMultiAutoComplete: React.FC<GroupsMultiAutocompleteProps>;
|
|
5
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.GroupsMultiAutoComplete = void 0;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _AutoComplete = require("@webiny/ui/AutoComplete");
|
|
10
|
+
var _graphql = require("./graphql");
|
|
11
|
+
var _reactHooks = require("@apollo/react-hooks");
|
|
12
|
+
var GroupsMultiAutoComplete = function GroupsMultiAutoComplete(props) {
|
|
13
|
+
var _useQuery = (0, _reactHooks.useQuery)(_graphql.LIST_GROUPS),
|
|
14
|
+
data = _useQuery.data,
|
|
15
|
+
loading = _useQuery.loading;
|
|
16
|
+
var options = loading || !data ? [] : data.security.groups.data;
|
|
17
|
+
return /*#__PURE__*/_react.default.createElement(_AutoComplete.MultiAutoComplete, Object.assign({}, props, {
|
|
18
|
+
options: options,
|
|
19
|
+
valueProp: "id",
|
|
20
|
+
unique: true,
|
|
21
|
+
value: loading ? undefined : props.value
|
|
22
|
+
}));
|
|
23
|
+
};
|
|
24
|
+
exports.GroupsMultiAutoComplete = GroupsMultiAutoComplete;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["GroupsMultiAutoComplete","props","useQuery","LIST_GROUPS","data","loading","options","security","groups","undefined","value"],"sources":["index.tsx"],"sourcesContent":["import React from \"react\";\nimport { MultiAutoComplete, MultiAutoCompleteProps } from \"@webiny/ui/AutoComplete\";\nimport { LIST_GROUPS } from \"./graphql\";\nimport { useQuery } from \"@apollo/react-hooks\";\n\ntype GroupsMultiAutocompleteProps = Partial<MultiAutoCompleteProps>;\n\nexport const GroupsMultiAutoComplete: React.FC<GroupsMultiAutocompleteProps> = props => {\n const { data, loading } = useQuery(LIST_GROUPS);\n\n const options = loading || !data ? [] : data.security.groups.data;\n\n return (\n <MultiAutoComplete\n {...props}\n options={options}\n valueProp={\"id\"}\n unique={true}\n value={loading ? undefined : props.value}\n />\n );\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AAIO,IAAMA,uBAA+D,GAAG,SAAlEA,uBAA+D,CAAGC,KAAK,EAAI;EACpF,gBAA0B,IAAAC,oBAAQ,EAACC,oBAAW,CAAC;IAAvCC,IAAI,aAAJA,IAAI;IAAEC,OAAO,aAAPA,OAAO;EAErB,IAAMC,OAAO,GAAGD,OAAO,IAAI,CAACD,IAAI,GAAG,EAAE,GAAGA,IAAI,CAACG,QAAQ,CAACC,MAAM,CAACJ,IAAI;EAEjE,oBACI,6BAAC,+BAAiB,oBACVH,KAAK;IACT,OAAO,EAAEK,OAAQ;IACjB,SAAS,EAAE,IAAK;IAChB,MAAM,EAAE,IAAK;IACb,KAAK,EAAED,OAAO,GAAGI,SAAS,GAAGR,KAAK,CAACS;EAAM,GAC3C;AAEV,CAAC;AAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const LIST_TEAMS: import("graphql").DocumentNode;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.LIST_TEAMS = void 0;
|
|
8
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
9
|
+
var _graphqlTag = _interopRequireDefault(require("graphql-tag"));
|
|
10
|
+
var _templateObject;
|
|
11
|
+
var LIST_TEAMS = (0, _graphqlTag.default)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n query listTeams {\n security {\n teams: listTeams {\n data {\n id\n slug\n name\n description\n createdOn\n }\n }\n }\n }\n"])));
|
|
12
|
+
exports.LIST_TEAMS = LIST_TEAMS;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["LIST_TEAMS","gql"],"sources":["graphql.ts"],"sourcesContent":["import gql from \"graphql-tag\";\n\nexport const LIST_TEAMS = gql`\n query listTeams {\n security {\n teams: listTeams {\n data {\n id\n slug\n name\n description\n createdOn\n }\n }\n }\n }\n`;\n"],"mappings":";;;;;;;;AAAA;AAA8B;AAEvB,IAAMA,UAAU,OAAGC,mBAAG,yXAc5B;AAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.TeamAutocomplete = void 0;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _AutoComplete = require("@webiny/ui/AutoComplete");
|
|
10
|
+
var _graphql = require("./graphql");
|
|
11
|
+
var _reactHooks = require("@apollo/react-hooks");
|
|
12
|
+
var TeamAutocomplete = function TeamAutocomplete(props) {
|
|
13
|
+
var _useQuery = (0, _reactHooks.useQuery)(_graphql.LIST_TEAMS),
|
|
14
|
+
data = _useQuery.data,
|
|
15
|
+
loading = _useQuery.loading;
|
|
16
|
+
var options = loading || !data ? [] : data.security.teams.data;
|
|
17
|
+
return /*#__PURE__*/_react.default.createElement(_AutoComplete.AutoComplete, Object.assign({}, props, {
|
|
18
|
+
options: options,
|
|
19
|
+
valueProp: "id",
|
|
20
|
+
value: loading ? undefined : props.value
|
|
21
|
+
}));
|
|
22
|
+
};
|
|
23
|
+
exports.TeamAutocomplete = TeamAutocomplete;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["TeamAutocomplete","props","useQuery","LIST_TEAMS","data","loading","options","security","teams","undefined","value"],"sources":["index.tsx"],"sourcesContent":["import React from \"react\";\nimport { AutoComplete, AutoCompleteProps } from \"@webiny/ui/AutoComplete\";\nimport { LIST_TEAMS } from \"./graphql\";\nimport { useQuery } from \"@apollo/react-hooks\";\n\ntype TeamAutocompleteProps = Partial<AutoCompleteProps>;\nexport const TeamAutocomplete: React.FC<TeamAutocompleteProps> = props => {\n const { data, loading } = useQuery(LIST_TEAMS);\n\n const options = loading || !data ? [] : data.security.teams.data;\n\n return (\n <AutoComplete\n {...props}\n options={options}\n valueProp={\"id\"}\n value={loading ? undefined : props.value}\n />\n );\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AAGO,IAAMA,gBAAiD,GAAG,SAApDA,gBAAiD,CAAGC,KAAK,EAAI;EACtE,gBAA0B,IAAAC,oBAAQ,EAACC,mBAAU,CAAC;IAAtCC,IAAI,aAAJA,IAAI;IAAEC,OAAO,aAAPA,OAAO;EAErB,IAAMC,OAAO,GAAGD,OAAO,IAAI,CAACD,IAAI,GAAG,EAAE,GAAGA,IAAI,CAACG,QAAQ,CAACC,KAAK,CAACJ,IAAI;EAEhE,oBACI,6BAAC,0BAAY,oBACLH,KAAK;IACT,OAAO,EAAEK,OAAQ;IACjB,SAAS,EAAE,IAAK;IAChB,KAAK,EAAED,OAAO,GAAGI,SAAS,GAAGR,KAAK,CAACS;EAAM,GAC3C;AAEV,CAAC;AAAC"}
|
package/index.js
CHANGED
|
@@ -12,6 +12,7 @@ var _appAdmin = require("@webiny/app-admin");
|
|
|
12
12
|
var _appSecurity = require("@webiny/app-security");
|
|
13
13
|
var _constants = require("./plugins/constants");
|
|
14
14
|
var _Groups = require("./ui/views/Groups");
|
|
15
|
+
var _Teams = require("./ui/views/Teams");
|
|
15
16
|
var _ApiKeys = require("./ui/views/ApiKeys");
|
|
16
17
|
var _plugins2 = _interopRequireDefault(require("./plugins"));
|
|
17
18
|
/**
|
|
@@ -25,14 +26,28 @@ var _default = function _default() {
|
|
|
25
26
|
exports.default = _default;
|
|
26
27
|
var AccessManagementExtension = function AccessManagementExtension() {
|
|
27
28
|
_plugins.plugins.register((0, _plugins2.default)());
|
|
29
|
+
var _useWcp = (0, _appAdmin.useWcp)(),
|
|
30
|
+
getProject = _useWcp.getProject;
|
|
31
|
+
var project = getProject();
|
|
32
|
+
var teams = false;
|
|
33
|
+
if (project) {
|
|
34
|
+
teams = project.package.features.advancedAccessControlLayer.options.teams;
|
|
35
|
+
}
|
|
28
36
|
return /*#__PURE__*/_react.default.createElement(_appAdmin.Plugins, null, /*#__PURE__*/_react.default.createElement(_appSecurity.HasPermission, {
|
|
29
37
|
name: _constants.Permission.Groups
|
|
30
38
|
}, /*#__PURE__*/_react.default.createElement(_appAdmin.AddRoute, {
|
|
31
39
|
exact: true,
|
|
32
|
-
path: "/access-management/
|
|
40
|
+
path: "/access-management/roles"
|
|
33
41
|
}, /*#__PURE__*/_react.default.createElement(_appAdmin.Layout, {
|
|
34
|
-
title: "Access Management -
|
|
35
|
-
}, /*#__PURE__*/_react.default.createElement(_Groups.Groups, null)))), /*#__PURE__*/_react.default.createElement(_appSecurity.HasPermission, {
|
|
42
|
+
title: "Access Management - Roles"
|
|
43
|
+
}, /*#__PURE__*/_react.default.createElement(_Groups.Groups, null)))), " ", teams && /*#__PURE__*/_react.default.createElement(_appSecurity.HasPermission, {
|
|
44
|
+
name: _constants.Permission.Teams
|
|
45
|
+
}, /*#__PURE__*/_react.default.createElement(_appAdmin.AddRoute, {
|
|
46
|
+
exact: true,
|
|
47
|
+
path: "/access-management/teams"
|
|
48
|
+
}, /*#__PURE__*/_react.default.createElement(_appAdmin.Layout, {
|
|
49
|
+
title: "Access Management - Teams"
|
|
50
|
+
}, /*#__PURE__*/_react.default.createElement(_Teams.Teams, null)))), /*#__PURE__*/_react.default.createElement(_appSecurity.HasPermission, {
|
|
36
51
|
name: _constants.Permission.ApiKeys
|
|
37
52
|
}, /*#__PURE__*/_react.default.createElement(_appAdmin.AddRoute, {
|
|
38
53
|
exact: true,
|
|
@@ -40,7 +55,7 @@ var AccessManagementExtension = function AccessManagementExtension() {
|
|
|
40
55
|
}, /*#__PURE__*/_react.default.createElement(_appAdmin.Layout, {
|
|
41
56
|
title: "Access Management - API Keys"
|
|
42
57
|
}, /*#__PURE__*/_react.default.createElement(_ApiKeys.ApiKeys, null)))), /*#__PURE__*/_react.default.createElement(_appSecurity.HasPermission, {
|
|
43
|
-
any: [_constants.Permission.Groups, _constants.Permission.ApiKeys]
|
|
58
|
+
any: [_constants.Permission.Groups, _constants.Permission.ApiKeys, _constants.Permission.Teams]
|
|
44
59
|
}, /*#__PURE__*/_react.default.createElement(_appAdmin.AddMenu, {
|
|
45
60
|
name: "settings"
|
|
46
61
|
}, /*#__PURE__*/_react.default.createElement(_appAdmin.AddMenu, {
|
|
@@ -49,9 +64,15 @@ var AccessManagementExtension = function AccessManagementExtension() {
|
|
|
49
64
|
}, /*#__PURE__*/_react.default.createElement(_appSecurity.HasPermission, {
|
|
50
65
|
name: _constants.Permission.Groups
|
|
51
66
|
}, /*#__PURE__*/_react.default.createElement(_appAdmin.AddMenu, {
|
|
52
|
-
name: "settings.accessManagement.
|
|
53
|
-
label: "
|
|
54
|
-
path: "/access-management/
|
|
67
|
+
name: "settings.accessManagement.roles",
|
|
68
|
+
label: "Roles",
|
|
69
|
+
path: "/access-management/roles"
|
|
70
|
+
})), teams && /*#__PURE__*/_react.default.createElement(_appSecurity.HasPermission, {
|
|
71
|
+
name: _constants.Permission.Teams
|
|
72
|
+
}, /*#__PURE__*/_react.default.createElement(_appAdmin.AddMenu, {
|
|
73
|
+
name: "settings.accessManagement.teams",
|
|
74
|
+
label: "Teams",
|
|
75
|
+
path: "/access-management/teams"
|
|
55
76
|
})), /*#__PURE__*/_react.default.createElement(_appSecurity.HasPermission, {
|
|
56
77
|
name: _constants.Permission.ApiKeys
|
|
57
78
|
}, /*#__PURE__*/_react.default.createElement(_appAdmin.AddMenu, {
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AccessManagementExtension","plugins","register","
|
|
1
|
+
{"version":3,"names":["AccessManagementExtension","plugins","register","accessManagementPlugins","useWcp","getProject","project","teams","package","features","advancedAccessControlLayer","options","Permission","Groups","Teams","ApiKeys","AccessManagement","memo"],"sources":["index.tsx"],"sourcesContent":["import React, { memo } from \"react\";\nimport { plugins } from \"@webiny/plugins\";\nimport { Layout, Plugins, AddMenu, AddRoute, useWcp } from \"@webiny/app-admin\";\nimport { HasPermission } from \"@webiny/app-security\";\nimport { Permission } from \"~/plugins/constants\";\nimport { Groups } from \"~/ui/views/Groups\";\nimport { Teams } from \"~/ui/views/Teams\";\nimport { ApiKeys } from \"~/ui/views/ApiKeys\";\nimport accessManagementPlugins from \"./plugins\";\n\n/**\n * TODO @ts-refactor\n * Find out why is there empty default export\n */\n// @ts-ignore\nexport default () => [];\n\nexport const AccessManagementExtension = () => {\n plugins.register(accessManagementPlugins());\n\n const { getProject } = useWcp();\n\n const project = getProject();\n let teams = false;\n if (project) {\n teams = project.package.features.advancedAccessControlLayer.options.teams;\n }\n\n return (\n <Plugins>\n <HasPermission name={Permission.Groups}>\n <AddRoute exact path={\"/access-management/roles\"}>\n <Layout title={\"Access Management - Roles\"}>\n <Groups />\n </Layout>\n </AddRoute>\n </HasPermission>{\" \"}\n {teams && (\n <HasPermission name={Permission.Teams}>\n <AddRoute exact path={\"/access-management/teams\"}>\n <Layout title={\"Access Management - Teams\"}>\n <Teams />\n </Layout>\n </AddRoute>\n </HasPermission>\n )}\n <HasPermission name={Permission.ApiKeys}>\n <AddRoute exact path={\"/access-management/api-keys\"}>\n <Layout title={\"Access Management - API Keys\"}>\n <ApiKeys />\n </Layout>\n </AddRoute>\n </HasPermission>\n <HasPermission any={[Permission.Groups, Permission.ApiKeys, Permission.Teams]}>\n <AddMenu name={\"settings\"}>\n <AddMenu name={\"settings.accessManagement\"} label={\"Access Management\"}>\n <HasPermission name={Permission.Groups}>\n <AddMenu\n name={\"settings.accessManagement.roles\"}\n label={\"Roles\"}\n path={\"/access-management/roles\"}\n />\n </HasPermission>\n {teams && (\n <HasPermission name={Permission.Teams}>\n <AddMenu\n name={\"settings.accessManagement.teams\"}\n label={\"Teams\"}\n path={\"/access-management/teams\"}\n />\n </HasPermission>\n )}\n\n <HasPermission name={Permission.ApiKeys}>\n <AddMenu\n name={\"settings.accessManagement.apiKeys\"}\n label={\"API Keys\"}\n path={\"/access-management/api-keys\"}\n />\n </HasPermission>\n </AddMenu>\n </AddMenu>\n </HasPermission>\n </Plugins>\n );\n};\n\nexport const AccessManagement = memo(AccessManagementExtension);\n"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA,eACe;EAAA,OAAM,EAAE;AAAA;AAAA;AAEhB,IAAMA,yBAAyB,GAAG,SAA5BA,yBAAyB,GAAS;EAC3CC,gBAAO,CAACC,QAAQ,CAAC,IAAAC,iBAAuB,GAAE,CAAC;EAE3C,cAAuB,IAAAC,gBAAM,GAAE;IAAvBC,UAAU,WAAVA,UAAU;EAElB,IAAMC,OAAO,GAAGD,UAAU,EAAE;EAC5B,IAAIE,KAAK,GAAG,KAAK;EACjB,IAAID,OAAO,EAAE;IACTC,KAAK,GAAGD,OAAO,CAACE,OAAO,CAACC,QAAQ,CAACC,0BAA0B,CAACC,OAAO,CAACJ,KAAK;EAC7E;EAEA,oBACI,6BAAC,iBAAO,qBACJ,6BAAC,0BAAa;IAAC,IAAI,EAAEK,qBAAU,CAACC;EAAO,gBACnC,6BAAC,kBAAQ;IAAC,KAAK;IAAC,IAAI,EAAE;EAA2B,gBAC7C,6BAAC,gBAAM;IAAC,KAAK,EAAE;EAA4B,gBACvC,6BAAC,cAAM,OAAG,CACL,CACF,CACC,EAAC,GAAG,EACnBN,KAAK,iBACF,6BAAC,0BAAa;IAAC,IAAI,EAAEK,qBAAU,CAACE;EAAM,gBAClC,6BAAC,kBAAQ;IAAC,KAAK;IAAC,IAAI,EAAE;EAA2B,gBAC7C,6BAAC,gBAAM;IAAC,KAAK,EAAE;EAA4B,gBACvC,6BAAC,YAAK,OAAG,CACJ,CACF,CAElB,eACD,6BAAC,0BAAa;IAAC,IAAI,EAAEF,qBAAU,CAACG;EAAQ,gBACpC,6BAAC,kBAAQ;IAAC,KAAK;IAAC,IAAI,EAAE;EAA8B,gBAChD,6BAAC,gBAAM;IAAC,KAAK,EAAE;EAA+B,gBAC1C,6BAAC,gBAAO,OAAG,CACN,CACF,CACC,eAChB,6BAAC,0BAAa;IAAC,GAAG,EAAE,CAACH,qBAAU,CAACC,MAAM,EAAED,qBAAU,CAACG,OAAO,EAAEH,qBAAU,CAACE,KAAK;EAAE,gBAC1E,6BAAC,iBAAO;IAAC,IAAI,EAAE;EAAW,gBACtB,6BAAC,iBAAO;IAAC,IAAI,EAAE,2BAA4B;IAAC,KAAK,EAAE;EAAoB,gBACnE,6BAAC,0BAAa;IAAC,IAAI,EAAEF,qBAAU,CAACC;EAAO,gBACnC,6BAAC,iBAAO;IACJ,IAAI,EAAE,iCAAkC;IACxC,KAAK,EAAE,OAAQ;IACf,IAAI,EAAE;EAA2B,EACnC,CACU,EACfN,KAAK,iBACF,6BAAC,0BAAa;IAAC,IAAI,EAAEK,qBAAU,CAACE;EAAM,gBAClC,6BAAC,iBAAO;IACJ,IAAI,EAAE,iCAAkC;IACxC,KAAK,EAAE,OAAQ;IACf,IAAI,EAAE;EAA2B,EACnC,CAET,eAED,6BAAC,0BAAa;IAAC,IAAI,EAAEF,qBAAU,CAACG;EAAQ,gBACpC,6BAAC,iBAAO;IACJ,IAAI,EAAE,mCAAoC;IAC1C,KAAK,EAAE,UAAW;IAClB,IAAI,EAAE;EAA8B,EACtC,CACU,CACV,CACJ,CACE,CACV;AAElB,CAAC;AAAC;AAEK,IAAMC,gBAAgB,gBAAG,IAAAC,WAAI,EAACjB,yBAAyB,CAAC;AAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/app-security-access-management",
|
|
3
|
-
"version": "0.0.0-unstable.
|
|
3
|
+
"version": "0.0.0-unstable.c7dec08bb0",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -15,14 +15,16 @@
|
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"@apollo/react-hooks": "3.1.5",
|
|
17
17
|
"@emotion/styled": "11.10.6",
|
|
18
|
-
"@
|
|
19
|
-
"@webiny/app
|
|
20
|
-
"@webiny/app-
|
|
21
|
-
"@webiny/
|
|
22
|
-
"@webiny/
|
|
23
|
-
"@webiny/
|
|
24
|
-
"@webiny/
|
|
25
|
-
"@webiny/
|
|
18
|
+
"@material-design-icons/svg": "0.12.1",
|
|
19
|
+
"@webiny/app": "0.0.0-unstable.c7dec08bb0",
|
|
20
|
+
"@webiny/app-admin": "0.0.0-unstable.c7dec08bb0",
|
|
21
|
+
"@webiny/app-security": "0.0.0-unstable.c7dec08bb0",
|
|
22
|
+
"@webiny/feature-flags": "0.0.0-unstable.c7dec08bb0",
|
|
23
|
+
"@webiny/form": "0.0.0-unstable.c7dec08bb0",
|
|
24
|
+
"@webiny/plugins": "0.0.0-unstable.c7dec08bb0",
|
|
25
|
+
"@webiny/react-router": "0.0.0-unstable.c7dec08bb0",
|
|
26
|
+
"@webiny/ui": "0.0.0-unstable.c7dec08bb0",
|
|
27
|
+
"@webiny/validation": "0.0.0-unstable.c7dec08bb0",
|
|
26
28
|
"emotion": "10.0.27",
|
|
27
29
|
"graphql-tag": "2.12.6",
|
|
28
30
|
"lodash": "4.17.21",
|
|
@@ -31,19 +33,19 @@
|
|
|
31
33
|
"react-helmet": "6.1.0"
|
|
32
34
|
},
|
|
33
35
|
"devDependencies": {
|
|
34
|
-
"@babel/cli": "
|
|
35
|
-
"@babel/core": "
|
|
36
|
-
"@babel/plugin-proposal-class-properties": "
|
|
37
|
-
"@babel/preset-env": "
|
|
38
|
-
"@babel/preset-react": "
|
|
39
|
-
"@babel/preset-typescript": "
|
|
40
|
-
"@types/react-helmet": "
|
|
41
|
-
"@webiny/cli": "
|
|
42
|
-
"@webiny/project-utils": "
|
|
43
|
-
"babel-plugin-emotion": "
|
|
44
|
-
"babel-plugin-lodash": "
|
|
45
|
-
"rimraf": "
|
|
46
|
-
"ttypescript": "
|
|
36
|
+
"@babel/cli": "7.20.7",
|
|
37
|
+
"@babel/core": "7.20.12",
|
|
38
|
+
"@babel/plugin-proposal-class-properties": "7.18.6",
|
|
39
|
+
"@babel/preset-env": "7.20.2",
|
|
40
|
+
"@babel/preset-react": "7.18.6",
|
|
41
|
+
"@babel/preset-typescript": "7.18.6",
|
|
42
|
+
"@types/react-helmet": "6.1.6",
|
|
43
|
+
"@webiny/cli": "0.0.0-unstable.c7dec08bb0",
|
|
44
|
+
"@webiny/project-utils": "0.0.0-unstable.c7dec08bb0",
|
|
45
|
+
"babel-plugin-emotion": "9.2.11",
|
|
46
|
+
"babel-plugin-lodash": "3.3.4",
|
|
47
|
+
"rimraf": "3.0.2",
|
|
48
|
+
"ttypescript": "1.5.15",
|
|
47
49
|
"typescript": "4.7.4"
|
|
48
50
|
},
|
|
49
51
|
"publishConfig": {
|
|
@@ -61,5 +63,5 @@
|
|
|
61
63
|
]
|
|
62
64
|
}
|
|
63
65
|
},
|
|
64
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "c7dec08bb095467cca6a61381bd399d66b7bb147"
|
|
65
67
|
}
|
package/plugins/constants.d.ts
CHANGED
package/plugins/constants.js
CHANGED
|
@@ -8,5 +8,6 @@ var Permission;
|
|
|
8
8
|
exports.Permission = Permission;
|
|
9
9
|
(function (Permission) {
|
|
10
10
|
Permission["Groups"] = "security.group";
|
|
11
|
+
Permission["Teams"] = "security.team";
|
|
11
12
|
Permission["ApiKeys"] = "security.apiKey";
|
|
12
13
|
})(Permission || (exports.Permission = Permission = {}));
|
package/plugins/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Permission"],"sources":["constants.ts"],"sourcesContent":["export enum Permission {\n Groups = \"security.group\",\n ApiKeys = \"security.apiKey\"\n}\n"],"mappings":";;;;;;IAAYA,UAAU;AAAA;AAAA,WAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;AAAA,GAAVA,UAAU,0BAAVA,UAAU"}
|
|
1
|
+
{"version":3,"names":["Permission"],"sources":["constants.ts"],"sourcesContent":["export enum Permission {\n Groups = \"security.group\",\n Teams = \"security.team\",\n ApiKeys = \"security.apiKey\"\n}\n"],"mappings":";;;;;;IAAYA,UAAU;AAAA;AAAA,WAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;AAAA,GAAVA,UAAU,0BAAVA,UAAU"}
|
|
@@ -15,11 +15,14 @@ var _Permissions = require("@webiny/app-admin/components/Permissions");
|
|
|
15
15
|
var _form = require("@webiny/form");
|
|
16
16
|
var _Elevation = require("@webiny/ui/Elevation");
|
|
17
17
|
var _Typography = require("@webiny/ui/Typography");
|
|
18
|
-
var
|
|
18
|
+
var _appSecurity = require("@webiny/app-security");
|
|
19
|
+
var _appAdmin = require("@webiny/app-admin");
|
|
20
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17;
|
|
19
21
|
var t = _i18n.i18n.ns("app-security-admin-users/plugins/permissionRenderer");
|
|
20
22
|
var SECURITY = "security";
|
|
21
23
|
var SECURITY_FULL_ACCESS = "".concat(SECURITY, ".*");
|
|
22
24
|
var SECURITY_GROUP_ACCESS = "".concat(SECURITY, ".group");
|
|
25
|
+
var SECURITY_TEAM_ACCESS = "".concat(SECURITY, ".team");
|
|
23
26
|
var SECURITY_API_KEY_ACCESS = "".concat(SECURITY, ".apiKey");
|
|
24
27
|
var FULL_ACCESS = "full";
|
|
25
28
|
var NO_ACCESS = "no";
|
|
@@ -27,6 +30,20 @@ var CUSTOM_ACCESS = "custom";
|
|
|
27
30
|
var SecurityPermissions = function SecurityPermissions(_ref) {
|
|
28
31
|
var value = _ref.value,
|
|
29
32
|
onChange = _ref.onChange;
|
|
33
|
+
var _useSecurity = (0, _appSecurity.useSecurity)(),
|
|
34
|
+
getPermission = _useSecurity.getPermission;
|
|
35
|
+
var _useWcp = (0, _appAdmin.useWcp)(),
|
|
36
|
+
getProject = _useWcp.getProject;
|
|
37
|
+
|
|
38
|
+
// We disable form elements for custom permissions if AACL cannot be used.
|
|
39
|
+
var cannotUseAacl = (0, _react.useMemo)(function () {
|
|
40
|
+
return !getPermission("aacl", true);
|
|
41
|
+
}, []);
|
|
42
|
+
var project = getProject();
|
|
43
|
+
var teams = false;
|
|
44
|
+
if (project) {
|
|
45
|
+
teams = project.package.features.advancedAccessControlLayer.options.teams;
|
|
46
|
+
}
|
|
30
47
|
var onFormChange = (0, _react.useCallback)(function (data) {
|
|
31
48
|
var newValue = [];
|
|
32
49
|
if (Array.isArray(value)) {
|
|
@@ -46,6 +63,11 @@ var SecurityPermissions = function SecurityPermissions(_ref) {
|
|
|
46
63
|
name: SECURITY_GROUP_ACCESS
|
|
47
64
|
});
|
|
48
65
|
}
|
|
66
|
+
if (data.teamAccessScope === FULL_ACCESS) {
|
|
67
|
+
permissions.push({
|
|
68
|
+
name: SECURITY_TEAM_ACCESS
|
|
69
|
+
});
|
|
70
|
+
}
|
|
49
71
|
if (data.apiKeyAccessScope === FULL_ACCESS) {
|
|
50
72
|
permissions.push({
|
|
51
73
|
name: SECURITY_API_KEY_ACCESS
|
|
@@ -83,6 +105,7 @@ var SecurityPermissions = function SecurityPermissions(_ref) {
|
|
|
83
105
|
var data = {
|
|
84
106
|
accessLevel: CUSTOM_ACCESS,
|
|
85
107
|
groupAccessScope: NO_ACCESS,
|
|
108
|
+
teamAccessScope: NO_ACCESS,
|
|
86
109
|
apiKeyAccessScope: NO_ACCESS
|
|
87
110
|
};
|
|
88
111
|
var hasGroupAccess = permissions.find(function (item) {
|
|
@@ -91,6 +114,12 @@ var SecurityPermissions = function SecurityPermissions(_ref) {
|
|
|
91
114
|
if (hasGroupAccess) {
|
|
92
115
|
data.groupAccessScope = FULL_ACCESS;
|
|
93
116
|
}
|
|
117
|
+
var hasTeamAccess = permissions.find(function (item) {
|
|
118
|
+
return item.name === SECURITY_TEAM_ACCESS;
|
|
119
|
+
});
|
|
120
|
+
if (hasTeamAccess) {
|
|
121
|
+
data.teamAccessScope = FULL_ACCESS;
|
|
122
|
+
}
|
|
94
123
|
var hasApiKeyAccess = permissions.find(function (item) {
|
|
95
124
|
return item.name === SECURITY_API_KEY_ACCESS;
|
|
96
125
|
});
|
|
@@ -107,6 +136,10 @@ var SecurityPermissions = function SecurityPermissions(_ref) {
|
|
|
107
136
|
Bind = _ref2.Bind;
|
|
108
137
|
return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_Grid.Grid, {
|
|
109
138
|
className: _Permissions.gridNoPaddingClass
|
|
139
|
+
}, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
140
|
+
span: 12
|
|
141
|
+
}, data.accessLevel === "custom" && cannotUseAacl && /*#__PURE__*/_react.default.createElement(_Permissions.CannotUseAaclAlert, null))), /*#__PURE__*/_react.default.createElement(_Grid.Grid, {
|
|
142
|
+
className: _Permissions.gridNoPaddingClass
|
|
110
143
|
}, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
111
144
|
span: 6
|
|
112
145
|
}, /*#__PURE__*/_react.default.createElement(_Permissions.PermissionInfo, {
|
|
@@ -137,7 +170,8 @@ var SecurityPermissions = function SecurityPermissions(_ref) {
|
|
|
137
170
|
}, /*#__PURE__*/_react.default.createElement(Bind, {
|
|
138
171
|
name: "apiKeyAccessScope"
|
|
139
172
|
}, /*#__PURE__*/_react.default.createElement(_Select.Select, {
|
|
140
|
-
label: t(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2.default)(["Access Scope"])))
|
|
173
|
+
label: t(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2.default)(["Access Scope"]))),
|
|
174
|
+
disabled: cannotUseAacl
|
|
141
175
|
}, /*#__PURE__*/_react.default.createElement("option", {
|
|
142
176
|
value: NO_ACCESS
|
|
143
177
|
}, t(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2.default)(["No access"])))), /*#__PURE__*/_react.default.createElement("option", {
|
|
@@ -151,17 +185,38 @@ var SecurityPermissions = function SecurityPermissions(_ref) {
|
|
|
151
185
|
span: 12
|
|
152
186
|
}, /*#__PURE__*/_react.default.createElement(_Typography.Typography, {
|
|
153
187
|
use: "overline"
|
|
154
|
-
}, t(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2.default)(["
|
|
188
|
+
}, t(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2.default)(["Roles"]))))), /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
155
189
|
span: 12
|
|
156
190
|
}, /*#__PURE__*/_react.default.createElement(Bind, {
|
|
157
191
|
name: "groupAccessScope"
|
|
158
192
|
}, /*#__PURE__*/_react.default.createElement(_Select.Select, {
|
|
159
|
-
label: t(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteral2.default)(["Access Scope"])))
|
|
193
|
+
label: t(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteral2.default)(["Access Scope"]))),
|
|
194
|
+
disabled: cannotUseAacl
|
|
160
195
|
}, /*#__PURE__*/_react.default.createElement("option", {
|
|
161
196
|
value: NO_ACCESS
|
|
162
197
|
}, t(_templateObject12 || (_templateObject12 = (0, _taggedTemplateLiteral2.default)(["No access"])))), /*#__PURE__*/_react.default.createElement("option", {
|
|
163
198
|
value: FULL_ACCESS
|
|
164
|
-
}, t(_templateObject13 || (_templateObject13 = (0, _taggedTemplateLiteral2.default)(["Full access"])))))))))
|
|
199
|
+
}, t(_templateObject13 || (_templateObject13 = (0, _taggedTemplateLiteral2.default)(["Full access"]))))))))), teams && /*#__PURE__*/_react.default.createElement(_Elevation.Elevation, {
|
|
200
|
+
z: 1,
|
|
201
|
+
style: {
|
|
202
|
+
marginTop: 10
|
|
203
|
+
}
|
|
204
|
+
}, /*#__PURE__*/_react.default.createElement(_Grid.Grid, null, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
205
|
+
span: 12
|
|
206
|
+
}, /*#__PURE__*/_react.default.createElement(_Typography.Typography, {
|
|
207
|
+
use: "overline"
|
|
208
|
+
}, t(_templateObject14 || (_templateObject14 = (0, _taggedTemplateLiteral2.default)(["Teams"]))))), /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
209
|
+
span: 12
|
|
210
|
+
}, /*#__PURE__*/_react.default.createElement(Bind, {
|
|
211
|
+
name: "teamAccessScope"
|
|
212
|
+
}, /*#__PURE__*/_react.default.createElement(_Select.Select, {
|
|
213
|
+
label: t(_templateObject15 || (_templateObject15 = (0, _taggedTemplateLiteral2.default)(["Access Scope"]))),
|
|
214
|
+
disabled: cannotUseAacl
|
|
215
|
+
}, /*#__PURE__*/_react.default.createElement("option", {
|
|
216
|
+
value: NO_ACCESS
|
|
217
|
+
}, t(_templateObject16 || (_templateObject16 = (0, _taggedTemplateLiteral2.default)(["No access"])))), /*#__PURE__*/_react.default.createElement("option", {
|
|
218
|
+
value: FULL_ACCESS
|
|
219
|
+
}, t(_templateObject17 || (_templateObject17 = (0, _taggedTemplateLiteral2.default)(["Full access"])))))))))));
|
|
165
220
|
});
|
|
166
221
|
};
|
|
167
222
|
exports.SecurityPermissions = SecurityPermissions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["t","i18n","ns","SECURITY","SECURITY_FULL_ACCESS","SECURITY_GROUP_ACCESS","SECURITY_API_KEY_ACCESS","FULL_ACCESS","NO_ACCESS","CUSTOM_ACCESS","SecurityPermissions","value","onChange","onFormChange","useCallback","data","newValue","Array","isArray","filter","item","name","startsWith","permissions","accessLevel","push","groupAccessScope","apiKeyAccessScope","length","formData","useMemo","hasFullAccess","find","hasGroupAccess","hasApiKeyAccess","Bind","gridNoPaddingClass","marginTop"],"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 { PermissionInfo, gridNoPaddingClass } 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\";\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_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}\nexport const SecurityPermissions: React.FC<SecurityPermissionsProps> = ({ value, onChange }) => {\n const onFormChange = useCallback(\n data => {\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 (data.accessLevel === FULL_ACCESS) {\n permissions.push({ name: SECURITY_FULL_ACCESS });\n } else if (data.accessLevel === CUSTOM_ACCESS) {\n if (data.groupAccessScope === FULL_ACCESS) {\n permissions.push({ name: SECURITY_GROUP_ACCESS });\n }\n\n if (data.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 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\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={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 label={t`Access Scope`}>\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`Groups`}</Typography>\n </Cell>\n <Cell span={12}>\n <Bind name={\"groupAccessScope\"}>\n <Select label={t`Access Scope`}>\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 </React.Fragment>\n )}\n </Fragment>\n );\n }}\n </Form>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["t","i18n","ns","SECURITY","SECURITY_FULL_ACCESS","SECURITY_GROUP_ACCESS","SECURITY_TEAM_ACCESS","SECURITY_API_KEY_ACCESS","FULL_ACCESS","NO_ACCESS","CUSTOM_ACCESS","SecurityPermissions","value","onChange","useSecurity","getPermission","useWcp","getProject","cannotUseAacl","useMemo","project","teams","package","features","advancedAccessControlLayer","options","onFormChange","useCallback","data","newValue","Array","isArray","filter","item","name","startsWith","permissions","accessLevel","push","groupAccessScope","teamAccessScope","apiKeyAccessScope","length","formData","hasFullAccess","find","hasGroupAccess","hasTeamAccess","hasApiKeyAccess","Bind","gridNoPaddingClass","marginTop"],"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: React.FC<SecurityPermissionsProps> = ({ value, onChange }) => {\n const { getPermission } = useSecurity();\n const { getProject } = 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 project = getProject();\n let teams = false;\n if (project) {\n teams = project.package.features.advancedAccessControlLayer.options.teams;\n }\n\n const onFormChange = useCallback(\n data => {\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 (data.accessLevel === FULL_ACCESS) {\n permissions.push({ name: SECURITY_FULL_ACCESS });\n } else if (data.accessLevel === CUSTOM_ACCESS) {\n if (data.groupAccessScope === FULL_ACCESS) {\n permissions.push({ name: SECURITY_GROUP_ACCESS });\n }\n\n if (data.teamAccessScope === FULL_ACCESS) {\n permissions.push({ name: SECURITY_TEAM_ACCESS });\n }\n\n if (data.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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"}
|
package/types.d.ts
CHANGED
package/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import { SecurityPermission } from \"@webiny/app-security/types\";\n\nexport interface Group {\n id: string;\n name: string;\n description: string;\n slug: string;\n system?: boolean;\n}\nexport interface ApiKey {\n id: string;\n token: string;\n name: string;\n description: string;\n permissions: SecurityPermission[];\n}\n"],"mappings":""}
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import { SecurityPermission } from \"@webiny/app-security/types\";\n\nexport interface Group {\n id: string;\n name: string;\n description: string;\n slug: string;\n system?: boolean;\n}\n\nexport interface Team {\n id: string;\n name: string;\n description: string;\n slug: string;\n system?: boolean;\n}\n\nexport interface ApiKey {\n id: string;\n token: string;\n name: string;\n description: string;\n permissions: SecurityPermission[];\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { InputElement } from "@webiny/app-admin/ui/elements/form/InputElement";
|
|
3
|
+
import { FormFieldElementRenderProps } from "@webiny/app-admin/ui/elements/form/FormFieldElement";
|
|
4
|
+
export declare class GroupsAutocompleteElement extends InputElement {
|
|
5
|
+
render(props: FormFieldElementRenderProps): React.ReactElement;
|
|
6
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.GroupsAutocompleteElement = void 0;
|
|
8
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
9
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
10
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
11
|
+
var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
|
|
12
|
+
var _react = _interopRequireDefault(require("react"));
|
|
13
|
+
var _InputElement2 = require("@webiny/app-admin/ui/elements/form/InputElement");
|
|
14
|
+
var _GroupsMultiAutocomplete = require("../../components/GroupsMultiAutocomplete");
|
|
15
|
+
var GroupsAutocompleteElement = /*#__PURE__*/function (_InputElement) {
|
|
16
|
+
(0, _inherits2.default)(GroupsAutocompleteElement, _InputElement);
|
|
17
|
+
var _super = (0, _createSuper2.default)(GroupsAutocompleteElement);
|
|
18
|
+
function GroupsAutocompleteElement() {
|
|
19
|
+
(0, _classCallCheck2.default)(this, GroupsAutocompleteElement);
|
|
20
|
+
return _super.apply(this, arguments);
|
|
21
|
+
}
|
|
22
|
+
(0, _createClass2.default)(GroupsAutocompleteElement, [{
|
|
23
|
+
key: "render",
|
|
24
|
+
value: function render(props) {
|
|
25
|
+
var formProps = props.formProps;
|
|
26
|
+
var _ref = formProps,
|
|
27
|
+
Bind = _ref.Bind;
|
|
28
|
+
var validators = this.config.validators;
|
|
29
|
+
/**
|
|
30
|
+
* TODO @ts-refactor @bruno
|
|
31
|
+
* Figure out what can validators be.
|
|
32
|
+
*/
|
|
33
|
+
if (validators && typeof validators !== "function") {
|
|
34
|
+
console.log("packages/app-security-access-management/src/ui/elements/GroupsAutocompleteElement.tsx validators is set but not a function.");
|
|
35
|
+
console.log(validators);
|
|
36
|
+
}
|
|
37
|
+
return /*#__PURE__*/_react.default.createElement(Bind, {
|
|
38
|
+
name: this.id,
|
|
39
|
+
validators: typeof validators === "function" ? validators({
|
|
40
|
+
formProps: formProps
|
|
41
|
+
}) : []
|
|
42
|
+
}, /*#__PURE__*/_react.default.createElement(_GroupsMultiAutocomplete.GroupsMultiAutoComplete, {
|
|
43
|
+
label: "Groups"
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
}]);
|
|
47
|
+
return GroupsAutocompleteElement;
|
|
48
|
+
}(_InputElement2.InputElement);
|
|
49
|
+
exports.GroupsAutocompleteElement = GroupsAutocompleteElement;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["GroupsAutocompleteElement","props","formProps","Bind","validators","config","console","log","id","InputElement"],"sources":["GroupsMultiAutocompleteElement.tsx"],"sourcesContent":["import React from \"react\";\nimport { FormRenderPropParams } from \"@webiny/form\";\nimport { InputElement } from \"@webiny/app-admin/ui/elements/form/InputElement\";\nimport { GroupsMultiAutoComplete } from \"~/components/GroupsMultiAutocomplete\";\nimport { FormFieldElementRenderProps } from \"@webiny/app-admin/ui/elements/form/FormFieldElement\";\n\nexport class GroupsAutocompleteElement extends InputElement {\n public override render(props: FormFieldElementRenderProps): React.ReactElement {\n const { formProps } = props;\n const { Bind } = formProps as FormRenderPropParams;\n const validators = this.config.validators;\n /**\n * TODO @ts-refactor @bruno\n * Figure out what can validators be.\n */\n if (validators && typeof validators !== \"function\") {\n console.log(\n \"packages/app-security-access-management/src/ui/elements/GroupsAutocompleteElement.tsx validators is set but not a function.\"\n );\n console.log(validators);\n }\n return (\n <Bind\n name={this.id}\n validators={typeof validators === \"function\" ? validators({ formProps }) : []}\n >\n <GroupsMultiAutoComplete label={\"Groups\"} />\n </Bind>\n );\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA;AAEA;AACA;AAA+E,IAGlEA,yBAAyB;EAAA;EAAA;EAAA;IAAA;IAAA;EAAA;EAAA;IAAA;IAAA,OAClC,gBAAuBC,KAAkC,EAAsB;MAC3E,IAAQC,SAAS,GAAKD,KAAK,CAAnBC,SAAS;MACjB,WAAiBA,SAAS;QAAlBC,IAAI,QAAJA,IAAI;MACZ,IAAMC,UAAU,GAAG,IAAI,CAACC,MAAM,CAACD,UAAU;MACzC;AACR;AACA;AACA;MACQ,IAAIA,UAAU,IAAI,OAAOA,UAAU,KAAK,UAAU,EAAE;QAChDE,OAAO,CAACC,GAAG,CACP,6HAA6H,CAChI;QACDD,OAAO,CAACC,GAAG,CAACH,UAAU,CAAC;MAC3B;MACA,oBACI,6BAAC,IAAI;QACD,IAAI,EAAE,IAAI,CAACI,EAAG;QACd,UAAU,EAAE,OAAOJ,UAAU,KAAK,UAAU,GAAGA,UAAU,CAAC;UAAEF,SAAS,EAATA;QAAU,CAAC,CAAC,GAAG;MAAG,gBAE9E,6BAAC,gDAAuB;QAAC,KAAK,EAAE;MAAS,EAAG,CACzC;IAEf;EAAC;EAAA;AAAA,EAvB0CO,2BAAY;AAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { InputElement } from "@webiny/app-admin/ui/elements/form/InputElement";
|
|
3
|
+
import { FormFieldElementRenderProps } from "@webiny/app-admin/ui/elements/form/FormFieldElement";
|
|
4
|
+
export declare class TeamAutocompleteElement extends InputElement {
|
|
5
|
+
render(props: FormFieldElementRenderProps): React.ReactElement;
|
|
6
|
+
}
|