@next-core/easyops-runtime 0.12.0 → 0.12.2
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.
|
@@ -9,10 +9,10 @@ exports.preCheckPermissionsForAny = preCheckPermissionsForAny;
|
|
|
9
9
|
exports.preCheckPermissionsForBrickOrRoute = preCheckPermissionsForBrickOrRoute;
|
|
10
10
|
exports.resetPermissionPreChecks = resetPermissionPreChecks;
|
|
11
11
|
exports.validatePermissions = validatePermissions;
|
|
12
|
-
var _lodash = require("lodash");
|
|
13
12
|
var _storyboard = require("@next-core/utils/storyboard");
|
|
14
13
|
var _microAppSdk = require("@next-api-sdk/micro-app-sdk");
|
|
15
14
|
var _auth = require("./auth.js");
|
|
15
|
+
const checkingPermissions = new Map();
|
|
16
16
|
const checkedPermissions = [];
|
|
17
17
|
const permissionMap = new Map();
|
|
18
18
|
function preCheckPermissions(storyboard) {
|
|
@@ -35,30 +35,50 @@ function preCheckPermissionsForAny(data) {
|
|
|
35
35
|
}
|
|
36
36
|
async function validatePermissions(usedActions) {
|
|
37
37
|
// Do not request known actions.
|
|
38
|
-
const
|
|
39
|
-
if (
|
|
38
|
+
const uncheckedActions = usedActions.filter(action => !checkedPermissions.includes(action));
|
|
39
|
+
if (uncheckedActions.length === 0) {
|
|
40
40
|
return;
|
|
41
41
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
42
|
+
const checkingTasks = [];
|
|
43
|
+
const restActions = [];
|
|
44
|
+
for (const action of uncheckedActions) {
|
|
45
|
+
const promise = checkingPermissions.get(action);
|
|
46
|
+
if (promise) {
|
|
47
|
+
checkingTasks.push(promise);
|
|
48
|
+
} else {
|
|
49
|
+
restActions.push(action);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (restActions.length > 0) {
|
|
53
|
+
const task = (async () => {
|
|
54
|
+
try {
|
|
55
|
+
const result = await (0, _microAppSdk.PermissionApi_validatePermissions)({
|
|
56
|
+
actions: restActions
|
|
57
|
+
}, {
|
|
58
|
+
noAbortOnRouteChange: true
|
|
59
|
+
});
|
|
60
|
+
for (const item of result.actions) {
|
|
61
|
+
permissionMap.set(item.action, item.authorizationStatus);
|
|
62
|
+
if (item.authorizationStatus === "undefined") {
|
|
63
|
+
// eslint-disable-next-line no-console
|
|
64
|
+
console.error(`Undefined permission action: "${item.action}"`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
} catch (error) {
|
|
68
|
+
// Allow pre-check to fail, and
|
|
69
|
+
// make it not crash when the backend service is not updated.
|
|
52
70
|
// eslint-disable-next-line no-console
|
|
53
|
-
console.error(
|
|
71
|
+
console.error("Pre-check permissions failed", error);
|
|
72
|
+
} finally {
|
|
73
|
+
checkedPermissions.push(...restActions);
|
|
54
74
|
}
|
|
75
|
+
})();
|
|
76
|
+
for (const action of restActions) {
|
|
77
|
+
checkingPermissions.set(action, task);
|
|
55
78
|
}
|
|
56
|
-
|
|
57
|
-
// Allow pre-check to fail, and
|
|
58
|
-
// make it not crash when the backend service is not updated.
|
|
59
|
-
// eslint-disable-next-line no-console
|
|
60
|
-
console.error("Pre-check permissions failed", error);
|
|
79
|
+
checkingTasks.push(task);
|
|
61
80
|
}
|
|
81
|
+
await Promise.all(checkingTasks);
|
|
62
82
|
}
|
|
63
83
|
|
|
64
84
|
/**
|
|
@@ -97,6 +117,7 @@ function checkPermissions(...actions) {
|
|
|
97
117
|
* Reset permission pre-checks after logged-out.
|
|
98
118
|
*/
|
|
99
119
|
function resetPermissionPreChecks() {
|
|
120
|
+
checkingPermissions.clear();
|
|
100
121
|
checkedPermissions.length = 0;
|
|
101
122
|
permissionMap.clear();
|
|
102
123
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkPermissions.js","names":["
|
|
1
|
+
{"version":3,"file":"checkPermissions.js","names":["_storyboard","require","_microAppSdk","_auth","checkingPermissions","Map","checkedPermissions","permissionMap","preCheckPermissions","storyboard","isLoggedIn","getAuth","isAdmin","usedActions","scanPermissionActionsInStoryboard","validatePermissions","preCheckPermissionsForBrickOrRoute","container","asyncComputeRealValue","Array","isArray","permissionsPreCheck","actions","preCheckPermissionsForAny","data","scanPermissionActionsInAny","uncheckedActions","filter","action","includes","length","checkingTasks","restActions","promise","get","push","task","result","PermissionApi_validatePermissions","noAbortOnRouteChange","item","set","authorizationStatus","console","error","Promise","all","checkPermissions","undefined","resetPermissionPreChecks","clear"],"sources":["../../src/checkPermissions.ts"],"sourcesContent":["import {\n scanPermissionActionsInAny,\n scanPermissionActionsInStoryboard,\n} from \"@next-core/utils/storyboard\";\nimport type { BrickConf, RouteConf, Storyboard } from \"@next-core/types\";\nimport { PermissionApi_validatePermissions } from \"@next-api-sdk/micro-app-sdk\";\nimport { getAuth, isLoggedIn } from \"./auth.js\";\n\ntype PermissionStatus = \"authorized\" | \"unauthorized\" | \"undefined\";\n\nconst checkingPermissions = new Map<string, Promise<void>>();\nconst checkedPermissions: string[] = [];\nconst permissionMap = new Map<string, PermissionStatus>();\n\nexport function preCheckPermissions(\n storyboard: Storyboard\n): Promise<void> | undefined {\n if (isLoggedIn() && !getAuth().isAdmin) {\n const usedActions = scanPermissionActionsInStoryboard(storyboard);\n return validatePermissions(usedActions);\n }\n}\n\nexport async function preCheckPermissionsForBrickOrRoute(\n container: BrickConf | RouteConf,\n asyncComputeRealValue: (value: unknown) => Promise<unknown>\n) {\n if (\n isLoggedIn() &&\n !getAuth().isAdmin &&\n Array.isArray(container.permissionsPreCheck)\n ) {\n const actions = (await asyncComputeRealValue(\n container.permissionsPreCheck\n )) as string[];\n return validatePermissions(actions);\n }\n}\n\nexport function preCheckPermissionsForAny(\n data: unknown\n): Promise<void> | undefined {\n if (isLoggedIn() && !getAuth().isAdmin) {\n const usedActions = scanPermissionActionsInAny(data);\n return validatePermissions(usedActions);\n }\n}\n\nexport async function validatePermissions(\n usedActions: string[]\n): Promise<void> {\n // Do not request known actions.\n const uncheckedActions = usedActions.filter(\n (action) => !checkedPermissions.includes(action)\n );\n if (uncheckedActions.length === 0) {\n return;\n }\n const checkingTasks: Promise<void>[] = [];\n const restActions: string[] = [];\n for (const action of uncheckedActions) {\n const promise = checkingPermissions.get(action);\n if (promise) {\n checkingTasks.push(promise);\n } else {\n restActions.push(action);\n }\n }\n if (restActions.length > 0) {\n const task = (async () => {\n try {\n const result = await PermissionApi_validatePermissions(\n { actions: restActions },\n { noAbortOnRouteChange: true }\n );\n for (const item of result.actions!) {\n permissionMap.set(item.action!, item.authorizationStatus!);\n if (item.authorizationStatus === \"undefined\") {\n // eslint-disable-next-line no-console\n console.error(`Undefined permission action: \"${item.action}\"`);\n }\n }\n } catch (error) {\n // Allow pre-check to fail, and\n // make it not crash when the backend service is not updated.\n // eslint-disable-next-line no-console\n console.error(\"Pre-check permissions failed\", error);\n } finally {\n checkedPermissions.push(...restActions);\n }\n })();\n for (const action of restActions) {\n checkingPermissions.set(action, task);\n }\n checkingTasks.push(task);\n }\n await Promise.all(checkingTasks);\n}\n\n/**\n * Check the current logged-in user whether to have all\n * permissions of actions passed to it.\n *\n * @param actions - Required permission actions.\n */\nexport function checkPermissions(...actions: string[]): boolean {\n if (!isLoggedIn()) {\n return false;\n }\n\n if (getAuth().isAdmin) {\n return true;\n }\n\n for (const action of actions) {\n // Only **exclusively authorized** permissions are ok.\n // Those scenarios below will fail:\n // - unauthorized actions (pre-check results)\n // - undefined actions (pre-check results)\n // - Un-pre-checked or pre-check failed\n switch (permissionMap.get(action)) {\n case \"unauthorized\":\n case \"undefined\":\n return false;\n case undefined:\n // eslint-disable-next-line no-console\n console.error(\n `Un-checked permission action: \"${action}\", please make sure the permission to check is defined in permissionsPreCheck.`\n );\n return false;\n }\n }\n return true;\n}\n\n/**\n * Reset permission pre-checks after logged-out.\n */\nexport function resetPermissionPreChecks(): void {\n checkingPermissions.clear();\n checkedPermissions.length = 0;\n permissionMap.clear();\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { difference } from "lodash";
|
|
2
1
|
import { scanPermissionActionsInAny, scanPermissionActionsInStoryboard } from "@next-core/utils/storyboard";
|
|
3
2
|
import { PermissionApi_validatePermissions } from "@next-api-sdk/micro-app-sdk";
|
|
4
3
|
import { getAuth, isLoggedIn } from "./auth.js";
|
|
4
|
+
const checkingPermissions = new Map();
|
|
5
5
|
const checkedPermissions = [];
|
|
6
6
|
const permissionMap = new Map();
|
|
7
7
|
export function preCheckPermissions(storyboard) {
|
|
@@ -24,30 +24,50 @@ export function preCheckPermissionsForAny(data) {
|
|
|
24
24
|
}
|
|
25
25
|
export async function validatePermissions(usedActions) {
|
|
26
26
|
// Do not request known actions.
|
|
27
|
-
const
|
|
28
|
-
if (
|
|
27
|
+
const uncheckedActions = usedActions.filter(action => !checkedPermissions.includes(action));
|
|
28
|
+
if (uncheckedActions.length === 0) {
|
|
29
29
|
return;
|
|
30
30
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
31
|
+
const checkingTasks = [];
|
|
32
|
+
const restActions = [];
|
|
33
|
+
for (const action of uncheckedActions) {
|
|
34
|
+
const promise = checkingPermissions.get(action);
|
|
35
|
+
if (promise) {
|
|
36
|
+
checkingTasks.push(promise);
|
|
37
|
+
} else {
|
|
38
|
+
restActions.push(action);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (restActions.length > 0) {
|
|
42
|
+
const task = (async () => {
|
|
43
|
+
try {
|
|
44
|
+
const result = await PermissionApi_validatePermissions({
|
|
45
|
+
actions: restActions
|
|
46
|
+
}, {
|
|
47
|
+
noAbortOnRouteChange: true
|
|
48
|
+
});
|
|
49
|
+
for (const item of result.actions) {
|
|
50
|
+
permissionMap.set(item.action, item.authorizationStatus);
|
|
51
|
+
if (item.authorizationStatus === "undefined") {
|
|
52
|
+
// eslint-disable-next-line no-console
|
|
53
|
+
console.error(`Undefined permission action: "${item.action}"`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
} catch (error) {
|
|
57
|
+
// Allow pre-check to fail, and
|
|
58
|
+
// make it not crash when the backend service is not updated.
|
|
41
59
|
// eslint-disable-next-line no-console
|
|
42
|
-
console.error(
|
|
60
|
+
console.error("Pre-check permissions failed", error);
|
|
61
|
+
} finally {
|
|
62
|
+
checkedPermissions.push(...restActions);
|
|
43
63
|
}
|
|
64
|
+
})();
|
|
65
|
+
for (const action of restActions) {
|
|
66
|
+
checkingPermissions.set(action, task);
|
|
44
67
|
}
|
|
45
|
-
|
|
46
|
-
// Allow pre-check to fail, and
|
|
47
|
-
// make it not crash when the backend service is not updated.
|
|
48
|
-
// eslint-disable-next-line no-console
|
|
49
|
-
console.error("Pre-check permissions failed", error);
|
|
68
|
+
checkingTasks.push(task);
|
|
50
69
|
}
|
|
70
|
+
await Promise.all(checkingTasks);
|
|
51
71
|
}
|
|
52
72
|
|
|
53
73
|
/**
|
|
@@ -89,6 +109,7 @@ export function checkPermissions() {
|
|
|
89
109
|
* Reset permission pre-checks after logged-out.
|
|
90
110
|
*/
|
|
91
111
|
export function resetPermissionPreChecks() {
|
|
112
|
+
checkingPermissions.clear();
|
|
92
113
|
checkedPermissions.length = 0;
|
|
93
114
|
permissionMap.clear();
|
|
94
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkPermissions.js","names":["
|
|
1
|
+
{"version":3,"file":"checkPermissions.js","names":["scanPermissionActionsInAny","scanPermissionActionsInStoryboard","PermissionApi_validatePermissions","getAuth","isLoggedIn","checkingPermissions","Map","checkedPermissions","permissionMap","preCheckPermissions","storyboard","isAdmin","usedActions","validatePermissions","preCheckPermissionsForBrickOrRoute","container","asyncComputeRealValue","Array","isArray","permissionsPreCheck","actions","preCheckPermissionsForAny","data","uncheckedActions","filter","action","includes","length","checkingTasks","restActions","promise","get","push","task","result","noAbortOnRouteChange","item","set","authorizationStatus","console","error","Promise","all","checkPermissions","_len","arguments","_key","undefined","resetPermissionPreChecks","clear"],"sources":["../../src/checkPermissions.ts"],"sourcesContent":["import {\n scanPermissionActionsInAny,\n scanPermissionActionsInStoryboard,\n} from \"@next-core/utils/storyboard\";\nimport type { BrickConf, RouteConf, Storyboard } from \"@next-core/types\";\nimport { PermissionApi_validatePermissions } from \"@next-api-sdk/micro-app-sdk\";\nimport { getAuth, isLoggedIn } from \"./auth.js\";\n\ntype PermissionStatus = \"authorized\" | \"unauthorized\" | \"undefined\";\n\nconst checkingPermissions = new Map<string, Promise<void>>();\nconst checkedPermissions: string[] = [];\nconst permissionMap = new Map<string, PermissionStatus>();\n\nexport function preCheckPermissions(\n storyboard: Storyboard\n): Promise<void> | undefined {\n if (isLoggedIn() && !getAuth().isAdmin) {\n const usedActions = scanPermissionActionsInStoryboard(storyboard);\n return validatePermissions(usedActions);\n }\n}\n\nexport async function preCheckPermissionsForBrickOrRoute(\n container: BrickConf | RouteConf,\n asyncComputeRealValue: (value: unknown) => Promise<unknown>\n) {\n if (\n isLoggedIn() &&\n !getAuth().isAdmin &&\n Array.isArray(container.permissionsPreCheck)\n ) {\n const actions = (await asyncComputeRealValue(\n container.permissionsPreCheck\n )) as string[];\n return validatePermissions(actions);\n }\n}\n\nexport function preCheckPermissionsForAny(\n data: unknown\n): Promise<void> | undefined {\n if (isLoggedIn() && !getAuth().isAdmin) {\n const usedActions = scanPermissionActionsInAny(data);\n return validatePermissions(usedActions);\n }\n}\n\nexport async function validatePermissions(\n usedActions: string[]\n): Promise<void> {\n // Do not request known actions.\n const uncheckedActions = usedActions.filter(\n (action) => !checkedPermissions.includes(action)\n );\n if (uncheckedActions.length === 0) {\n return;\n }\n const checkingTasks: Promise<void>[] = [];\n const restActions: string[] = [];\n for (const action of uncheckedActions) {\n const promise = checkingPermissions.get(action);\n if (promise) {\n checkingTasks.push(promise);\n } else {\n restActions.push(action);\n }\n }\n if (restActions.length > 0) {\n const task = (async () => {\n try {\n const result = await PermissionApi_validatePermissions(\n { actions: restActions },\n { noAbortOnRouteChange: true }\n );\n for (const item of result.actions!) {\n permissionMap.set(item.action!, item.authorizationStatus!);\n if (item.authorizationStatus === \"undefined\") {\n // eslint-disable-next-line no-console\n console.error(`Undefined permission action: \"${item.action}\"`);\n }\n }\n } catch (error) {\n // Allow pre-check to fail, and\n // make it not crash when the backend service is not updated.\n // eslint-disable-next-line no-console\n console.error(\"Pre-check permissions failed\", error);\n } finally {\n checkedPermissions.push(...restActions);\n }\n })();\n for (const action of restActions) {\n checkingPermissions.set(action, task);\n }\n checkingTasks.push(task);\n }\n await Promise.all(checkingTasks);\n}\n\n/**\n * Check the current logged-in user whether to have all\n * permissions of actions passed to it.\n *\n * @param actions - Required permission actions.\n */\nexport function checkPermissions(...actions: string[]): boolean {\n if (!isLoggedIn()) {\n return false;\n }\n\n if (getAuth().isAdmin) {\n return true;\n }\n\n for (const action of actions) {\n // Only **exclusively authorized** permissions are ok.\n // Those scenarios below will fail:\n // - unauthorized actions (pre-check results)\n // - undefined actions (pre-check results)\n // - Un-pre-checked or pre-check failed\n switch (permissionMap.get(action)) {\n case \"unauthorized\":\n case \"undefined\":\n return false;\n case undefined:\n // eslint-disable-next-line no-console\n console.error(\n `Un-checked permission action: \"${action}\", please make sure the permission to check is defined in permissionsPreCheck.`\n );\n return false;\n }\n }\n return true;\n}\n\n/**\n * Reset permission pre-checks after logged-out.\n */\nexport function resetPermissionPreChecks(): void {\n checkingPermissions.clear();\n checkedPermissions.length = 0;\n permissionMap.clear();\n}\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@next-core/easyops-runtime",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.2",
|
|
4
4
|
"homepage": "https://github.com/easyops-cn/next-core/tree/v3/packages/easyops-runtime",
|
|
5
5
|
"license": "GPL-3.0",
|
|
6
6
|
"repository": {
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"@next-core/cook": "^2.4.7",
|
|
49
49
|
"@next-core/http": "^1.2.6",
|
|
50
50
|
"@next-core/pipes": "^2.0.24",
|
|
51
|
-
"@next-core/runtime": "^1.
|
|
51
|
+
"@next-core/runtime": "^1.52.0",
|
|
52
52
|
"@next-core/types": "^1.11.2",
|
|
53
53
|
"@next-core/utils": "^1.7.16",
|
|
54
54
|
"js-yaml": "^3.14.1",
|
|
@@ -60,5 +60,5 @@
|
|
|
60
60
|
"jest-websocket-mock": "^2.5.0",
|
|
61
61
|
"whatwg-fetch": "^3.6.20"
|
|
62
62
|
},
|
|
63
|
-
"gitHead": "
|
|
63
|
+
"gitHead": "d1d751b017f41785438ab2bb42282c122809f901"
|
|
64
64
|
}
|