@webiny/app-audit-logs 0.0.0-unstable.ac6ebf63c6 → 0.0.0-unstable.dbdf5d6258
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/SecurityPermission.d.ts +2 -0
- package/SecurityPermission.js +22 -0
- package/SecurityPermission.js.map +1 -0
- package/hooks/schema.d.ts +8 -8
- package/index.js +3 -3
- package/index.js.map +1 -1
- package/package.json +11 -13
- package/plugins/permissionRenderer/AuditLogsPermissions.d.ts +0 -8
- package/plugins/permissionRenderer/AuditLogsPermissions.js +0 -100
- package/plugins/permissionRenderer/AuditLogsPermissions.js.map +0 -1
- package/plugins/permissionRenderer/index.d.ts +0 -1
- package/plugins/permissionRenderer/index.js +0 -32
- package/plugins/permissionRenderer/index.js.map +0 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { AdminConfig } from "@webiny/app-admin";
|
|
3
|
+
import { ReactComponent as PermissionsIcon } from "@webiny/icons/manage_search.svg";
|
|
4
|
+
const {
|
|
5
|
+
Security
|
|
6
|
+
} = AdminConfig;
|
|
7
|
+
export const SecurityPermission = () => {
|
|
8
|
+
return /*#__PURE__*/React.createElement(AdminConfig, null, /*#__PURE__*/React.createElement(Security.Permissions, {
|
|
9
|
+
name: "audit-logs",
|
|
10
|
+
title: "Audit Logs",
|
|
11
|
+
description: "Manage Audit Logs permissions.",
|
|
12
|
+
icon: /*#__PURE__*/React.createElement(PermissionsIcon, null),
|
|
13
|
+
schema: {
|
|
14
|
+
prefix: "al",
|
|
15
|
+
fullAccess: {
|
|
16
|
+
name: "al.*"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}));
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=SecurityPermission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","AdminConfig","ReactComponent","PermissionsIcon","Security","SecurityPermission","createElement","Permissions","name","title","description","icon","schema","prefix","fullAccess"],"sources":["SecurityPermission.tsx"],"sourcesContent":["import React from \"react\";\nimport { AdminConfig } from \"@webiny/app-admin\";\nimport { ReactComponent as PermissionsIcon } from \"@webiny/icons/manage_search.svg\";\n\nconst { Security } = AdminConfig;\n\nexport const SecurityPermission = () => {\n return (\n <AdminConfig>\n <Security.Permissions\n name=\"audit-logs\"\n title=\"Audit Logs\"\n description=\"Manage Audit Logs permissions.\"\n icon={<PermissionsIcon />}\n schema={{\n prefix: \"al\",\n fullAccess: { name: \"al.*\" }\n }}\n />\n </AdminConfig>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,WAAW,QAAQ,mBAAmB;AAC/C,SAASC,cAAc,IAAIC,eAAe,QAAQ,iCAAiC;AAEnF,MAAM;EAAEC;AAAS,CAAC,GAAGH,WAAW;AAEhC,OAAO,MAAMI,kBAAkB,GAAGA,CAAA,KAAM;EACpC,oBACIL,KAAA,CAAAM,aAAA,CAACL,WAAW,qBACRD,KAAA,CAAAM,aAAA,CAACF,QAAQ,CAACG,WAAW;IACjBC,IAAI,EAAC,YAAY;IACjBC,KAAK,EAAC,YAAY;IAClBC,WAAW,EAAC,gCAAgC;IAC5CC,IAAI,eAAEX,KAAA,CAAAM,aAAA,CAACH,eAAe,MAAE,CAAE;IAC1BS,MAAM,EAAE;MACJC,MAAM,EAAE,IAAI;MACZC,UAAU,EAAE;QAAEN,IAAI,EAAE;MAAO;IAC/B;EAAE,CACL,CACQ,CAAC;AAEtB,CAAC","ignoreList":[]}
|
package/hooks/schema.d.ts
CHANGED
|
@@ -8,12 +8,12 @@ export declare const auditLogSchema: zod.ZodObject<{
|
|
|
8
8
|
type: zod.ZodOptional<zod.ZodString>;
|
|
9
9
|
}, "strip", zod.ZodTypeAny, {
|
|
10
10
|
id: string;
|
|
11
|
-
type?: string | undefined;
|
|
12
11
|
displayName?: string | undefined;
|
|
12
|
+
type?: string | undefined;
|
|
13
13
|
}, {
|
|
14
14
|
id: string;
|
|
15
|
-
type?: string | undefined;
|
|
16
15
|
displayName?: string | undefined;
|
|
16
|
+
type?: string | undefined;
|
|
17
17
|
}>;
|
|
18
18
|
createdOn: zod.ZodEffects<zod.ZodDate, Date, unknown>;
|
|
19
19
|
app: zod.ZodString;
|
|
@@ -30,8 +30,8 @@ export declare const auditLogSchema: zod.ZodObject<{
|
|
|
30
30
|
action: ActionType;
|
|
31
31
|
createdBy: {
|
|
32
32
|
id: string;
|
|
33
|
-
type?: string | undefined;
|
|
34
33
|
displayName?: string | undefined;
|
|
34
|
+
type?: string | undefined;
|
|
35
35
|
};
|
|
36
36
|
createdOn: Date;
|
|
37
37
|
app: string;
|
|
@@ -46,8 +46,8 @@ export declare const auditLogSchema: zod.ZodObject<{
|
|
|
46
46
|
action: ActionType;
|
|
47
47
|
createdBy: {
|
|
48
48
|
id: string;
|
|
49
|
-
type?: string | undefined;
|
|
50
49
|
displayName?: string | undefined;
|
|
50
|
+
type?: string | undefined;
|
|
51
51
|
};
|
|
52
52
|
app: string;
|
|
53
53
|
message: string;
|
|
@@ -65,12 +65,12 @@ export declare const listAuditLogsSchema: zod.ZodArray<zod.ZodObject<{
|
|
|
65
65
|
type: zod.ZodOptional<zod.ZodString>;
|
|
66
66
|
}, "strip", zod.ZodTypeAny, {
|
|
67
67
|
id: string;
|
|
68
|
-
type?: string | undefined;
|
|
69
68
|
displayName?: string | undefined;
|
|
69
|
+
type?: string | undefined;
|
|
70
70
|
}, {
|
|
71
71
|
id: string;
|
|
72
|
-
type?: string | undefined;
|
|
73
72
|
displayName?: string | undefined;
|
|
73
|
+
type?: string | undefined;
|
|
74
74
|
}>;
|
|
75
75
|
createdOn: zod.ZodEffects<zod.ZodDate, Date, unknown>;
|
|
76
76
|
app: zod.ZodString;
|
|
@@ -87,8 +87,8 @@ export declare const listAuditLogsSchema: zod.ZodArray<zod.ZodObject<{
|
|
|
87
87
|
action: ActionType;
|
|
88
88
|
createdBy: {
|
|
89
89
|
id: string;
|
|
90
|
-
type?: string | undefined;
|
|
91
90
|
displayName?: string | undefined;
|
|
91
|
+
type?: string | undefined;
|
|
92
92
|
};
|
|
93
93
|
createdOn: Date;
|
|
94
94
|
app: string;
|
|
@@ -103,8 +103,8 @@ export declare const listAuditLogsSchema: zod.ZodArray<zod.ZodObject<{
|
|
|
103
103
|
action: ActionType;
|
|
104
104
|
createdBy: {
|
|
105
105
|
id: string;
|
|
106
|
-
type?: string | undefined;
|
|
107
106
|
displayName?: string | undefined;
|
|
107
|
+
type?: string | undefined;
|
|
108
108
|
};
|
|
109
109
|
app: string;
|
|
110
110
|
message: string;
|
package/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import { ReactComponent as Icon } from "@webiny/icons/manage_search.svg";
|
|
|
4
4
|
import { AdminConfig, AdminLayout, useWcp } from "@webiny/app-admin";
|
|
5
5
|
import { HasPermission } from "@webiny/app-admin";
|
|
6
6
|
import { LogsModule } from "./views/Logs/LogsModule.js";
|
|
7
|
-
import {
|
|
7
|
+
import { SecurityPermission } from "./SecurityPermission.js";
|
|
8
8
|
import { LogsView } from "./views/Logs/LogsView.js";
|
|
9
9
|
import { AuditLogsListWithConfig } from "./config/list/index.js";
|
|
10
10
|
import { Routes } from "./routes.js";
|
|
@@ -18,7 +18,7 @@ export const AuditLogs = () => {
|
|
|
18
18
|
if (!wcp.canUseAuditLogs()) {
|
|
19
19
|
return null;
|
|
20
20
|
}
|
|
21
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(LogsModule, null), /*#__PURE__*/React.createElement(AdminConfig, null, /*#__PURE__*/React.createElement(HasPermission, {
|
|
21
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(LogsModule, null), /*#__PURE__*/React.createElement(SecurityPermission, null), /*#__PURE__*/React.createElement(AdminConfig, null, /*#__PURE__*/React.createElement(HasPermission, {
|
|
22
22
|
any: ["al.*"]
|
|
23
23
|
}, /*#__PURE__*/React.createElement(Menu, {
|
|
24
24
|
name: "auditLogs",
|
|
@@ -36,7 +36,7 @@ export const AuditLogs = () => {
|
|
|
36
36
|
element: /*#__PURE__*/React.createElement(AdminLayout, {
|
|
37
37
|
title: "Audit Logs - Logs"
|
|
38
38
|
}, /*#__PURE__*/React.createElement(AuditLogsListWithConfig, null, /*#__PURE__*/React.createElement(LogsView, null)))
|
|
39
|
-
})))
|
|
39
|
+
}))));
|
|
40
40
|
};
|
|
41
41
|
|
|
42
42
|
//# sourceMappingURL=index.js.map
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useRouter","ReactComponent","Icon","AdminConfig","AdminLayout","useWcp","HasPermission","LogsModule","
|
|
1
|
+
{"version":3,"names":["React","useRouter","ReactComponent","Icon","AdminConfig","AdminLayout","useWcp","HasPermission","LogsModule","SecurityPermission","LogsView","AuditLogsListWithConfig","Routes","Menu","Route","AuditLogs","wcp","router","canUseAuditLogs","createElement","Fragment","any","name","pinnable","element","Link","text","icon","label","to","getLink","AuditLogsList","route","title"],"sources":["index.tsx"],"sourcesContent":["import React from \"react\";\nimport { useRouter } from \"@webiny/app-admin\";\nimport { ReactComponent as Icon } from \"@webiny/icons/manage_search.svg\";\nimport { AdminConfig, AdminLayout, useWcp } from \"@webiny/app-admin\";\nimport { HasPermission } from \"@webiny/app-admin\";\nimport { LogsModule } from \"~/views/Logs/LogsModule.js\";\nimport { SecurityPermission } from \"~/SecurityPermission.js\";\nimport { LogsView } from \"~/views/Logs/LogsView.js\";\nimport { AuditLogsListWithConfig } from \"~/config/list/index.js\";\nimport { Routes } from \"~/routes.js\";\n\nconst { Menu, Route } = AdminConfig;\n\nexport const AuditLogs = () => {\n const wcp = useWcp();\n const router = useRouter();\n\n if (!wcp.canUseAuditLogs()) {\n return null;\n }\n\n return (\n <>\n <LogsModule />\n <SecurityPermission />\n <AdminConfig>\n <HasPermission any={[\"al.*\"]}>\n <Menu\n name=\"auditLogs\"\n pinnable\n element={\n <Menu.Link\n text={\"Audit Logs\"}\n icon={<Menu.Link.Icon element={<Icon />} label={\"Audit Logs\"} />}\n to={router.getLink(Routes.AuditLogsList)}\n />\n }\n />\n <Route\n route={Routes.AuditLogsList}\n element={\n <AdminLayout title={\"Audit Logs - Logs\"}>\n <AuditLogsListWithConfig>\n <LogsView />\n </AuditLogsListWithConfig>\n </AdminLayout>\n }\n />\n </HasPermission>\n </AdminConfig>\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,SAAS,QAAQ,mBAAmB;AAC7C,SAASC,cAAc,IAAIC,IAAI,QAAQ,iCAAiC;AACxE,SAASC,WAAW,EAAEC,WAAW,EAAEC,MAAM,QAAQ,mBAAmB;AACpE,SAASC,aAAa,QAAQ,mBAAmB;AACjD,SAASC,UAAU;AACnB,SAASC,kBAAkB;AAC3B,SAASC,QAAQ;AACjB,SAASC,uBAAuB;AAChC,SAASC,MAAM;AAEf,MAAM;EAAEC,IAAI;EAAEC;AAAM,CAAC,GAAGV,WAAW;AAEnC,OAAO,MAAMW,SAAS,GAAGA,CAAA,KAAM;EAC3B,MAAMC,GAAG,GAAGV,MAAM,CAAC,CAAC;EACpB,MAAMW,MAAM,GAAGhB,SAAS,CAAC,CAAC;EAE1B,IAAI,CAACe,GAAG,CAACE,eAAe,CAAC,CAAC,EAAE;IACxB,OAAO,IAAI;EACf;EAEA,oBACIlB,KAAA,CAAAmB,aAAA,CAAAnB,KAAA,CAAAoB,QAAA,qBACIpB,KAAA,CAAAmB,aAAA,CAACX,UAAU,MAAE,CAAC,eACdR,KAAA,CAAAmB,aAAA,CAACV,kBAAkB,MAAE,CAAC,eACtBT,KAAA,CAAAmB,aAAA,CAACf,WAAW,qBACRJ,KAAA,CAAAmB,aAAA,CAACZ,aAAa;IAACc,GAAG,EAAE,CAAC,MAAM;EAAE,gBACzBrB,KAAA,CAAAmB,aAAA,CAACN,IAAI;IACDS,IAAI,EAAC,WAAW;IAChBC,QAAQ;IACRC,OAAO,eACHxB,KAAA,CAAAmB,aAAA,CAACN,IAAI,CAACY,IAAI;MACNC,IAAI,EAAE,YAAa;MACnBC,IAAI,eAAE3B,KAAA,CAAAmB,aAAA,CAACN,IAAI,CAACY,IAAI,CAACtB,IAAI;QAACqB,OAAO,eAAExB,KAAA,CAAAmB,aAAA,CAAChB,IAAI,MAAE,CAAE;QAACyB,KAAK,EAAE;MAAa,CAAE,CAAE;MACjEC,EAAE,EAAEZ,MAAM,CAACa,OAAO,CAAClB,MAAM,CAACmB,aAAa;IAAE,CAC5C;EACJ,CACJ,CAAC,eACF/B,KAAA,CAAAmB,aAAA,CAACL,KAAK;IACFkB,KAAK,EAAEpB,MAAM,CAACmB,aAAc;IAC5BP,OAAO,eACHxB,KAAA,CAAAmB,aAAA,CAACd,WAAW;MAAC4B,KAAK,EAAE;IAAoB,gBACpCjC,KAAA,CAAAmB,aAAA,CAACR,uBAAuB,qBACpBX,KAAA,CAAAmB,aAAA,CAACT,QAAQ,MAAE,CACU,CAChB;EAChB,CACJ,CACU,CACN,CACf,CAAC;AAEX,CAAC","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/app-audit-logs",
|
|
3
|
-
"version": "0.0.0-unstable.
|
|
3
|
+
"version": "0.0.0-unstable.dbdf5d6258",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"repository": {
|
|
@@ -13,16 +13,14 @@
|
|
|
13
13
|
"@apollo/react-hooks": "3.1.5",
|
|
14
14
|
"@emotion/react": "11.10.8",
|
|
15
15
|
"@emotion/styled": "11.10.6",
|
|
16
|
-
"@webiny/
|
|
17
|
-
"@webiny/app": "0.0.0-unstable.
|
|
18
|
-
"@webiny/
|
|
19
|
-
"@webiny/
|
|
20
|
-
"@webiny/
|
|
21
|
-
"@webiny/
|
|
22
|
-
"@webiny/
|
|
23
|
-
"@webiny/
|
|
24
|
-
"@webiny/react-properties": "0.0.0-unstable.ac6ebf63c6",
|
|
25
|
-
"@webiny/ui": "0.0.0-unstable.ac6ebf63c6",
|
|
16
|
+
"@webiny/app": "0.0.0-unstable.dbdf5d6258",
|
|
17
|
+
"@webiny/app-admin": "0.0.0-unstable.dbdf5d6258",
|
|
18
|
+
"@webiny/common-audit-logs": "0.0.0-unstable.dbdf5d6258",
|
|
19
|
+
"@webiny/form": "0.0.0-unstable.dbdf5d6258",
|
|
20
|
+
"@webiny/icons": "0.0.0-unstable.dbdf5d6258",
|
|
21
|
+
"@webiny/react-composition": "0.0.0-unstable.dbdf5d6258",
|
|
22
|
+
"@webiny/react-properties": "0.0.0-unstable.dbdf5d6258",
|
|
23
|
+
"@webiny/ui": "0.0.0-unstable.dbdf5d6258",
|
|
26
24
|
"date-fns": "2.30.0",
|
|
27
25
|
"emotion": "10.0.27",
|
|
28
26
|
"graphql-tag": "2.12.6",
|
|
@@ -34,7 +32,7 @@
|
|
|
34
32
|
},
|
|
35
33
|
"devDependencies": {
|
|
36
34
|
"@types/react": "18.2.79",
|
|
37
|
-
"@webiny/build-tools": "0.0.0-unstable.
|
|
35
|
+
"@webiny/build-tools": "0.0.0-unstable.dbdf5d6258",
|
|
38
36
|
"execa": "5.1.1",
|
|
39
37
|
"rimraf": "6.1.3",
|
|
40
38
|
"typescript": "5.9.3"
|
|
@@ -43,5 +41,5 @@
|
|
|
43
41
|
"access": "public",
|
|
44
42
|
"directory": "dist"
|
|
45
43
|
},
|
|
46
|
-
"gitHead": "
|
|
44
|
+
"gitHead": "dbdf5d62587b971d52125a69ad6e69bae9ce8ee7"
|
|
47
45
|
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { Identity } from "@webiny/app-admin/domain/Identity.js";
|
|
3
|
-
interface PageBuilderPermissionsProps {
|
|
4
|
-
value: Identity.Permission;
|
|
5
|
-
onChange: (value: Identity.Permission[]) => void;
|
|
6
|
-
}
|
|
7
|
-
export declare const AuditLogsPermissions: ({ value, onChange }: PageBuilderPermissionsProps) => React.JSX.Element;
|
|
8
|
-
export {};
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import React, { Fragment, useCallback, useMemo } from "react";
|
|
2
|
-
import { Cell, Grid } from "@webiny/ui/Grid/index.js";
|
|
3
|
-
import { Select } from "@webiny/ui/Select/index.js";
|
|
4
|
-
import { i18n } from "@webiny/app/i18n/index.js";
|
|
5
|
-
import { CannotUseAaclAlert, gridWithPaddingClass, PermissionInfo } from "@webiny/app-admin";
|
|
6
|
-
import { Form } from "@webiny/form";
|
|
7
|
-
import { useSecurity } from "@webiny/app-admin";
|
|
8
|
-
const t = i18n.ns("app-audit-logs/plugins/permissionRenderer");
|
|
9
|
-
const AUDIT_LOGS = "al";
|
|
10
|
-
const AUDIT_LOGS_FULL_ACCESS = "al.*";
|
|
11
|
-
const FULL_ACCESS = "full";
|
|
12
|
-
const NO_ACCESS = "no";
|
|
13
|
-
const CUSTOM_ACCESS = "custom";
|
|
14
|
-
export const AuditLogsPermissions = ({
|
|
15
|
-
value,
|
|
16
|
-
onChange
|
|
17
|
-
}) => {
|
|
18
|
-
const {
|
|
19
|
-
getPermission
|
|
20
|
-
} = useSecurity();
|
|
21
|
-
|
|
22
|
-
// We disable form elements for custom permissions if AACL cannot be used.
|
|
23
|
-
const cannotUseAAcl = useMemo(() => {
|
|
24
|
-
return !getPermission("aacl", true);
|
|
25
|
-
}, []);
|
|
26
|
-
const onFormChange = useCallback(formData => {
|
|
27
|
-
let newValue = [];
|
|
28
|
-
if (Array.isArray(value)) {
|
|
29
|
-
// Let's just filter out the `al*` permission objects, it's easier to build new ones from scratch.
|
|
30
|
-
newValue = value.filter(item => !item.name.startsWith(AUDIT_LOGS));
|
|
31
|
-
}
|
|
32
|
-
if (formData.accessLevel === NO_ACCESS) {
|
|
33
|
-
onChange(newValue);
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
if (formData.accessLevel === FULL_ACCESS) {
|
|
37
|
-
newValue.push({
|
|
38
|
-
name: AUDIT_LOGS_FULL_ACCESS
|
|
39
|
-
});
|
|
40
|
-
onChange(newValue);
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// Handling custom access level.
|
|
45
|
-
|
|
46
|
-
onChange(newValue);
|
|
47
|
-
}, [value]);
|
|
48
|
-
const formData = useMemo(() => {
|
|
49
|
-
if (!Array.isArray(value)) {
|
|
50
|
-
return {
|
|
51
|
-
accessLevel: NO_ACCESS
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
const hasFullAccess = value.find(item => item.name === AUDIT_LOGS_FULL_ACCESS || item.name === "*");
|
|
55
|
-
if (hasFullAccess) {
|
|
56
|
-
return {
|
|
57
|
-
accessLevel: FULL_ACCESS
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
const permissions = value.filter(item => item.name.startsWith(AUDIT_LOGS));
|
|
61
|
-
if (!permissions.length) {
|
|
62
|
-
return {
|
|
63
|
-
accessLevel: NO_ACCESS
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
const formData = {
|
|
67
|
-
accessLevel: CUSTOM_ACCESS
|
|
68
|
-
};
|
|
69
|
-
return formData;
|
|
70
|
-
}, []);
|
|
71
|
-
return /*#__PURE__*/React.createElement(Form, {
|
|
72
|
-
data: formData,
|
|
73
|
-
onChange: onFormChange
|
|
74
|
-
}, ({
|
|
75
|
-
data,
|
|
76
|
-
Bind
|
|
77
|
-
}) => /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(Grid, {
|
|
78
|
-
className: gridWithPaddingClass
|
|
79
|
-
}, /*#__PURE__*/React.createElement(Cell, {
|
|
80
|
-
span: 12
|
|
81
|
-
}, data.accessLevel === "custom" && cannotUseAAcl && /*#__PURE__*/React.createElement(CannotUseAaclAlert, null))), /*#__PURE__*/React.createElement(Grid, {
|
|
82
|
-
className: gridWithPaddingClass
|
|
83
|
-
}, /*#__PURE__*/React.createElement(Cell, {
|
|
84
|
-
span: 6
|
|
85
|
-
}, /*#__PURE__*/React.createElement(PermissionInfo, {
|
|
86
|
-
title: t`Access Level`
|
|
87
|
-
})), /*#__PURE__*/React.createElement(Cell, {
|
|
88
|
-
span: 6
|
|
89
|
-
}, /*#__PURE__*/React.createElement(Bind, {
|
|
90
|
-
name: "accessLevel"
|
|
91
|
-
}, /*#__PURE__*/React.createElement(Select, null, /*#__PURE__*/React.createElement("option", {
|
|
92
|
-
value: NO_ACCESS
|
|
93
|
-
}, t`No access`), /*#__PURE__*/React.createElement("option", {
|
|
94
|
-
value: FULL_ACCESS
|
|
95
|
-
}, t`Full access`), /*#__PURE__*/React.createElement("option", {
|
|
96
|
-
value: CUSTOM_ACCESS
|
|
97
|
-
}, t`Custom access`))))), data.accessLevel === CUSTOM_ACCESS && /*#__PURE__*/React.createElement(React.Fragment, null)));
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
//# sourceMappingURL=AuditLogsPermissions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["React","Fragment","useCallback","useMemo","Cell","Grid","Select","i18n","CannotUseAaclAlert","gridWithPaddingClass","PermissionInfo","Form","useSecurity","t","ns","AUDIT_LOGS","AUDIT_LOGS_FULL_ACCESS","FULL_ACCESS","NO_ACCESS","CUSTOM_ACCESS","AuditLogsPermissions","value","onChange","getPermission","cannotUseAAcl","onFormChange","formData","newValue","Array","isArray","filter","item","name","startsWith","accessLevel","push","hasFullAccess","find","permissions","length","createElement","data","Bind","className","span","title"],"sources":["AuditLogsPermissions.tsx"],"sourcesContent":["import React, { Fragment, useCallback, useMemo } from \"react\";\nimport { Cell, Grid } from \"@webiny/ui/Grid/index.js\";\nimport { Select } from \"@webiny/ui/Select/index.js\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { CannotUseAaclAlert, gridWithPaddingClass, PermissionInfo } from \"@webiny/app-admin\";\nimport { Form } from \"@webiny/form\";\nimport { useSecurity } from \"@webiny/app-admin\";\nimport type { AaclPermission } from \"@webiny/app-admin\";\nimport { Identity } from \"@webiny/app-admin/domain/Identity.js\";\n\nconst t = i18n.ns(\"app-audit-logs/plugins/permissionRenderer\");\n\nconst AUDIT_LOGS = \"al\";\nconst AUDIT_LOGS_FULL_ACCESS = \"al.*\";\nconst FULL_ACCESS = \"full\";\nconst NO_ACCESS = \"no\";\nconst CUSTOM_ACCESS = \"custom\";\n\ninterface PageBuilderPermissionsProps {\n value: Identity.Permission;\n onChange: (value: Identity.Permission[]) => void;\n}\nexport const AuditLogsPermissions = ({ value, onChange }: PageBuilderPermissionsProps) => {\n const { getPermission } = useSecurity();\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 onFormChange = useCallback(\n (formData: Identity.Permission) => {\n let newValue: Identity.Permission[] = [];\n if (Array.isArray(value)) {\n // Let's just filter out the `al*` permission objects, it's easier to build new ones from scratch.\n newValue = value.filter(item => !item.name.startsWith(AUDIT_LOGS));\n }\n\n if (formData.accessLevel === NO_ACCESS) {\n onChange(newValue);\n return;\n }\n\n if (formData.accessLevel === FULL_ACCESS) {\n newValue.push({ name: AUDIT_LOGS_FULL_ACCESS });\n onChange(newValue);\n return;\n }\n\n // Handling custom access level.\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 === AUDIT_LOGS_FULL_ACCESS || item.name === \"*\"\n );\n if (hasFullAccess) {\n return { accessLevel: FULL_ACCESS };\n }\n\n const permissions = value.filter(item => item.name.startsWith(AUDIT_LOGS));\n if (!permissions.length) {\n return { accessLevel: NO_ACCESS };\n }\n\n const formData = {\n accessLevel: CUSTOM_ACCESS\n };\n\n return formData;\n }, []);\n\n return (\n <Form data={formData} onChange={onFormChange}>\n {({ data, Bind }) => (\n <Fragment>\n <Grid className={gridWithPaddingClass}>\n <Cell span={12}>\n {data.accessLevel === \"custom\" && cannotUseAAcl && (\n <CannotUseAaclAlert />\n )}\n </Cell>\n </Grid>\n <Grid className={gridWithPaddingClass}>\n <Cell span={6}>\n <PermissionInfo title={t`Access Level`} />\n </Cell>\n <Cell span={6}>\n <Bind name={\"accessLevel\"}>\n <Select>\n <option value={NO_ACCESS}>{t`No access`}</option>\n <option value={FULL_ACCESS}>{t`Full access`}</option>\n <option value={CUSTOM_ACCESS}>{t`Custom access`}</option>\n </Select>\n </Bind>\n </Cell>\n </Grid>\n {data.accessLevel === CUSTOM_ACCESS && <></>}\n </Fragment>\n )}\n </Form>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const AuditLogsPermissions: () => null;
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import React, { useEffect } from "react";
|
|
2
|
-
import { ReactComponent as PermissionsIcon } from "@webiny/icons/manage_search.svg";
|
|
3
|
-
import { i18n } from "@webiny/app/i18n/index.js";
|
|
4
|
-
import { plugins } from "@webiny/plugins";
|
|
5
|
-
import { Accordion } from "@webiny/admin-ui";
|
|
6
|
-
import { AuditLogsPermissions as AuditLogsPermissionsComponent } from "./AuditLogsPermissions.js";
|
|
7
|
-
const t = i18n.ns("app-audit-logs/plugins/permissionRenderer");
|
|
8
|
-
const createPermissions = () => {
|
|
9
|
-
return {
|
|
10
|
-
type: "admin-app-permissions-renderer",
|
|
11
|
-
name: "admin-app-permissions-renderer-audit-logs",
|
|
12
|
-
render(props) {
|
|
13
|
-
return /*#__PURE__*/React.createElement(Accordion.Item, {
|
|
14
|
-
icon: /*#__PURE__*/React.createElement(Accordion.Item.Icon, {
|
|
15
|
-
icon: /*#__PURE__*/React.createElement(PermissionsIcon, null),
|
|
16
|
-
label: "Audit Logs Permissions"
|
|
17
|
-
}),
|
|
18
|
-
title: t`Audit Logs`,
|
|
19
|
-
description: t`Manage Audit Logs app access permissions.`,
|
|
20
|
-
"data-testid": "permission.al"
|
|
21
|
-
}, /*#__PURE__*/React.createElement(AuditLogsPermissionsComponent, props));
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
export const AuditLogsPermissions = () => {
|
|
26
|
-
useEffect(() => {
|
|
27
|
-
plugins.register(createPermissions());
|
|
28
|
-
}, []);
|
|
29
|
-
return null;
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","ReactComponent","PermissionsIcon","i18n","plugins","Accordion","AuditLogsPermissions","AuditLogsPermissionsComponent","t","ns","createPermissions","type","name","render","props","createElement","Item","icon","Icon","label","title","description","register"],"sources":["index.tsx"],"sourcesContent":["import React, { useEffect } from \"react\";\nimport { ReactComponent as PermissionsIcon } from \"@webiny/icons/manage_search.svg\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { plugins } from \"@webiny/plugins\";\nimport { Accordion } from \"@webiny/admin-ui\";\nimport type { AdminAppPermissionRendererPlugin } from \"@webiny/app-admin/types.js\";\nimport { AuditLogsPermissions as AuditLogsPermissionsComponent } from \"./AuditLogsPermissions.js\";\n\nconst t = i18n.ns(\"app-audit-logs/plugins/permissionRenderer\");\n\nconst createPermissions = (): AdminAppPermissionRendererPlugin => {\n return {\n type: \"admin-app-permissions-renderer\",\n name: \"admin-app-permissions-renderer-audit-logs\",\n render(props) {\n return (\n <Accordion.Item\n icon={\n <Accordion.Item.Icon\n icon={<PermissionsIcon />}\n label={\"Audit Logs Permissions\"}\n />\n }\n title={t`Audit Logs`}\n description={t`Manage Audit Logs app access permissions.`}\n data-testid={\"permission.al\"}\n >\n <AuditLogsPermissionsComponent {...props} />\n </Accordion.Item>\n );\n }\n };\n};\n\nexport const AuditLogsPermissions = () => {\n useEffect(() => {\n plugins.register(createPermissions());\n }, []);\n return null;\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,SAASC,cAAc,IAAIC,eAAe,QAAQ,iCAAiC;AACnF,SAASC,IAAI,QAAQ,2BAA2B;AAChD,SAASC,OAAO,QAAQ,iBAAiB;AACzC,SAASC,SAAS,QAAQ,kBAAkB;AAE5C,SAASC,oBAAoB,IAAIC,6BAA6B;AAE9D,MAAMC,CAAC,GAAGL,IAAI,CAACM,EAAE,CAAC,2CAA2C,CAAC;AAE9D,MAAMC,iBAAiB,GAAGA,CAAA,KAAwC;EAC9D,OAAO;IACHC,IAAI,EAAE,gCAAgC;IACtCC,IAAI,EAAE,2CAA2C;IACjDC,MAAMA,CAACC,KAAK,EAAE;MACV,oBACIf,KAAA,CAAAgB,aAAA,CAACV,SAAS,CAACW,IAAI;QACXC,IAAI,eACAlB,KAAA,CAAAgB,aAAA,CAACV,SAAS,CAACW,IAAI,CAACE,IAAI;UAChBD,IAAI,eAAElB,KAAA,CAAAgB,aAAA,CAACb,eAAe,MAAE,CAAE;UAC1BiB,KAAK,EAAE;QAAyB,CACnC,CACJ;QACDC,KAAK,EAAEZ,CAAC,YAAa;QACrBa,WAAW,EAAEb,CAAC,2CAA4C;QAC1D,eAAa;MAAgB,gBAE7BT,KAAA,CAAAgB,aAAA,CAACR,6BAA6B,EAAKO,KAAQ,CAC/B,CAAC;IAEzB;EACJ,CAAC;AACL,CAAC;AAED,OAAO,MAAMR,oBAAoB,GAAGA,CAAA,KAAM;EACtCN,SAAS,CAAC,MAAM;IACZI,OAAO,CAACkB,QAAQ,CAACZ,iBAAiB,CAAC,CAAC,CAAC;EACzC,CAAC,EAAE,EAAE,CAAC;EACN,OAAO,IAAI;AACf,CAAC","ignoreList":[]}
|