@webiny/app-security-access-management 0.0.0-unstable.c59b9cc5b9 → 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.
Files changed (51) hide show
  1. package/components/GroupsMultiAutocomplete/graphql.d.ts +1 -0
  2. package/components/GroupsMultiAutocomplete/graphql.js +12 -0
  3. package/components/GroupsMultiAutocomplete/graphql.js.map +1 -0
  4. package/components/GroupsMultiAutocomplete/index.d.ts +5 -0
  5. package/components/GroupsMultiAutocomplete/index.js +24 -0
  6. package/components/GroupsMultiAutocomplete/index.js.map +1 -0
  7. package/components/TeamAutocomplete/graphql.d.ts +1 -0
  8. package/components/TeamAutocomplete/graphql.js +12 -0
  9. package/components/TeamAutocomplete/graphql.js.map +1 -0
  10. package/components/TeamAutocomplete/index.d.ts +5 -0
  11. package/components/TeamAutocomplete/index.js +23 -0
  12. package/components/TeamAutocomplete/index.js.map +1 -0
  13. package/index.js +28 -7
  14. package/index.js.map +1 -1
  15. package/package.json +14 -12
  16. package/plugins/constants.d.ts +1 -0
  17. package/plugins/constants.js +1 -0
  18. package/plugins/constants.js.map +1 -1
  19. package/plugins/permissionRenderer/SecurityPermissions.js +60 -5
  20. package/plugins/permissionRenderer/SecurityPermissions.js.map +1 -1
  21. package/types.d.ts +7 -0
  22. package/types.js.map +1 -1
  23. package/ui/elements/GroupsMultiAutocompleteElement.d.ts +6 -0
  24. package/ui/elements/GroupsMultiAutocompleteElement.js +49 -0
  25. package/ui/elements/GroupsMultiAutocompleteElement.js.map +1 -0
  26. package/ui/elements/TeamAutocompleteElement.d.ts +6 -0
  27. package/ui/elements/TeamAutocompleteElement.js +49 -0
  28. package/ui/elements/TeamAutocompleteElement.js.map +1 -0
  29. package/ui/views/ApiKeys/ApiKeyForm.js +19 -1
  30. package/ui/views/ApiKeys/ApiKeyForm.js.map +1 -1
  31. package/ui/views/Groups/GroupsDataList.js +8 -8
  32. package/ui/views/Groups/GroupsDataList.js.map +1 -1
  33. package/ui/views/Groups/GroupsForm.js +30 -17
  34. package/ui/views/Groups/GroupsForm.js.map +1 -1
  35. package/ui/views/Groups/graphql.js +1 -1
  36. package/ui/views/Groups/graphql.js.map +1 -1
  37. package/ui/views/Teams/Teams.d.ts +8 -0
  38. package/ui/views/Teams/Teams.js +19 -0
  39. package/ui/views/Teams/Teams.js.map +1 -0
  40. package/ui/views/Teams/TeamsDataList.d.ts +5 -0
  41. package/ui/views/Teams/TeamsDataList.js +192 -0
  42. package/ui/views/Teams/TeamsDataList.js.map +1 -0
  43. package/ui/views/Teams/TeamsForm.d.ts +5 -0
  44. package/ui/views/Teams/TeamsForm.js +196 -0
  45. package/ui/views/Teams/TeamsForm.js.map +1 -0
  46. package/ui/views/Teams/graphql.d.ts +5 -0
  47. package/ui/views/Teams/graphql.js +21 -0
  48. package/ui/views/Teams/graphql.js.map +1 -0
  49. package/ui/views/Teams/index.d.ts +1 -0
  50. package/ui/views/Teams/index.js +16 -0
  51. 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,5 @@
1
+ import React from "react";
2
+ import { AutoCompleteProps } from "@webiny/ui/AutoComplete";
3
+ declare type TeamAutocompleteProps = Partial<AutoCompleteProps>;
4
+ export declare const TeamAutocomplete: React.FC<TeamAutocompleteProps>;
5
+ export {};
@@ -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/groups"
40
+ path: "/access-management/roles"
33
41
  }, /*#__PURE__*/_react.default.createElement(_appAdmin.Layout, {
34
- title: "Access Management - Groups"
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.groups",
53
- label: "Groups",
54
- path: "/access-management/groups"
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","accessManagementPugins","Permission","Groups","ApiKeys","AccessManagement","memo"],"sources":["index.tsx"],"sourcesContent":["import React, { memo } from \"react\";\nimport { plugins } from \"@webiny/plugins\";\nimport { Layout, Plugins, AddMenu, AddRoute } from \"@webiny/app-admin\";\nimport { HasPermission } from \"@webiny/app-security\";\nimport { Permission } from \"~/plugins/constants\";\nimport { Groups } from \"~/ui/views/Groups\";\nimport { ApiKeys } from \"~/ui/views/ApiKeys\";\nimport accessManagementPugins 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(accessManagementPugins());\n\n return (\n <Plugins>\n <HasPermission name={Permission.Groups}>\n <AddRoute exact path={\"/access-management/groups\"}>\n <Layout title={\"Access Management - Groups\"}>\n <Groups />\n </Layout>\n </AddRoute>\n </HasPermission>\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]}>\n <AddMenu name={\"settings\"}>\n <AddMenu name={\"settings.accessManagement\"} label={\"Access Management\"}>\n <HasPermission name={Permission.Groups}>\n <AddMenu\n name={\"settings.accessManagement.groups\"}\n label={\"Groups\"}\n path={\"/access-management/groups\"}\n />\n </HasPermission>\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;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,iBAAsB,GAAE,CAAC;EAE1C,oBACI,6BAAC,iBAAO,qBACJ,6BAAC,0BAAa;IAAC,IAAI,EAAEC,qBAAU,CAACC;EAAO,gBACnC,6BAAC,kBAAQ;IAAC,KAAK;IAAC,IAAI,EAAE;EAA4B,gBAC9C,6BAAC,gBAAM;IAAC,KAAK,EAAE;EAA6B,gBACxC,6BAAC,cAAM,OAAG,CACL,CACF,CACC,eAChB,6BAAC,0BAAa;IAAC,IAAI,EAAED,qBAAU,CAACE;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,CAACF,qBAAU,CAACC,MAAM,EAAED,qBAAU,CAACE,OAAO;EAAE,gBACxD,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,kCAAmC;IACzC,KAAK,EAAE,QAAS;IAChB,IAAI,EAAE;EAA4B,EACpC,CACU,eAChB,6BAAC,0BAAa;IAAC,IAAI,EAAED,qBAAU,CAACE;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,EAACR,yBAAyB,CAAC;AAAC"}
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.c59b9cc5b9",
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
- "@webiny/app": "0.0.0-unstable.c59b9cc5b9",
19
- "@webiny/app-admin": "0.0.0-unstable.c59b9cc5b9",
20
- "@webiny/app-security": "0.0.0-unstable.c59b9cc5b9",
21
- "@webiny/form": "0.0.0-unstable.c59b9cc5b9",
22
- "@webiny/plugins": "0.0.0-unstable.c59b9cc5b9",
23
- "@webiny/react-router": "0.0.0-unstable.c59b9cc5b9",
24
- "@webiny/ui": "0.0.0-unstable.c59b9cc5b9",
25
- "@webiny/validation": "0.0.0-unstable.c59b9cc5b9",
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",
@@ -38,8 +40,8 @@
38
40
  "@babel/preset-react": "7.18.6",
39
41
  "@babel/preset-typescript": "7.18.6",
40
42
  "@types/react-helmet": "6.1.6",
41
- "@webiny/cli": "0.0.0-unstable.c59b9cc5b9",
42
- "@webiny/project-utils": "0.0.0-unstable.c59b9cc5b9",
43
+ "@webiny/cli": "0.0.0-unstable.c7dec08bb0",
44
+ "@webiny/project-utils": "0.0.0-unstable.c7dec08bb0",
43
45
  "babel-plugin-emotion": "9.2.11",
44
46
  "babel-plugin-lodash": "3.3.4",
45
47
  "rimraf": "3.0.2",
@@ -61,5 +63,5 @@
61
63
  ]
62
64
  }
63
65
  },
64
- "gitHead": "c59b9cc5b96b7fd91388de93c7fff2d977d25220"
66
+ "gitHead": "c7dec08bb095467cca6a61381bd399d66b7bb147"
65
67
  }
@@ -1,4 +1,5 @@
1
1
  export declare enum Permission {
2
2
  Groups = "security.group",
3
+ Teams = "security.team",
3
4
  ApiKeys = "security.apiKey"
4
5
  }
@@ -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 = {}));
@@ -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 _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13;
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)(["Groups"]))))), /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
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
@@ -6,6 +6,13 @@ export interface Group {
6
6
  slug: string;
7
7
  system?: boolean;
8
8
  }
9
+ export interface Team {
10
+ id: string;
11
+ name: string;
12
+ description: string;
13
+ slug: string;
14
+ system?: boolean;
15
+ }
9
16
  export interface ApiKey {
10
17
  id: string;
11
18
  token: string;
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
+ }