@mercurjs/core 2.3.2-canary.2 → 2.3.2-canary.3
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.
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { AuthenticatedMedusaRequest, MedusaResponse } from "@medusajs/framework";
|
|
2
|
+
/**
|
|
3
|
+
* The acting member's effective permissions for the current seller, as a flat
|
|
4
|
+
* list of `resource:operation` strings with wildcards expanded.
|
|
5
|
+
*
|
|
6
|
+
* Roles come from `req.auth_context.app_metadata`, which `ensureSellerMiddleware`
|
|
7
|
+
* populates from the member's `seller_member.role_id`. Reading them there rather
|
|
8
|
+
* than from the member keeps this scoped to the seller the request is acting on —
|
|
9
|
+
* one member can belong to several sellers with a different role in each.
|
|
10
|
+
*
|
|
11
|
+
* When the rbac flag is off `resolvePermissions` returns the whole universe, so
|
|
12
|
+
* the panel sees an unrestricted policy rather than an empty one.
|
|
13
|
+
*/
|
|
14
|
+
export declare const GET: (req: AuthenticatedMedusaRequest, res: MedusaResponse<{
|
|
15
|
+
permissions: string[];
|
|
16
|
+
}>) => Promise<void>;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = void 0;
|
|
4
|
+
const framework_1 = require("@medusajs/framework");
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
/**
|
|
7
|
+
* The acting member's effective permissions for the current seller, as a flat
|
|
8
|
+
* list of `resource:operation` strings with wildcards expanded.
|
|
9
|
+
*
|
|
10
|
+
* Roles come from `req.auth_context.app_metadata`, which `ensureSellerMiddleware`
|
|
11
|
+
* populates from the member's `seller_member.role_id`. Reading them there rather
|
|
12
|
+
* than from the member keeps this scoped to the seller the request is acting on —
|
|
13
|
+
* one member can belong to several sellers with a different role in each.
|
|
14
|
+
*
|
|
15
|
+
* When the rbac flag is off `resolvePermissions` returns the whole universe, so
|
|
16
|
+
* the panel sees an unrestricted policy rather than an empty one.
|
|
17
|
+
*/
|
|
18
|
+
const GET = async (req, res) => {
|
|
19
|
+
const roleIds = req.auth_context?.app_metadata?.roles ?? [];
|
|
20
|
+
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
21
|
+
const universe = [];
|
|
22
|
+
const seen = new Set();
|
|
23
|
+
const consider = (resource, operation) => {
|
|
24
|
+
if (!resource ||
|
|
25
|
+
!operation ||
|
|
26
|
+
resource === utils_1.WILDCARD ||
|
|
27
|
+
operation === utils_1.WILDCARD) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const key = `${resource}:${operation}`;
|
|
31
|
+
if (seen.has(key)) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
seen.add(key);
|
|
35
|
+
universe.push({ resource, operation });
|
|
36
|
+
};
|
|
37
|
+
for (const definition of Object.values(utils_1.Policy)) {
|
|
38
|
+
consider(definition?.resource, definition?.operation);
|
|
39
|
+
}
|
|
40
|
+
// Covers policies persisted at runtime that the code registry doesn't know.
|
|
41
|
+
const { data: persistedPolicies } = await query.graph({
|
|
42
|
+
entity: "rbac_policy",
|
|
43
|
+
fields: ["resource", "operation"],
|
|
44
|
+
});
|
|
45
|
+
for (const policy of persistedPolicies ?? []) {
|
|
46
|
+
consider(policy?.resource, policy?.operation);
|
|
47
|
+
}
|
|
48
|
+
const granted = await (0, framework_1.resolvePermissions)({
|
|
49
|
+
roles: roleIds,
|
|
50
|
+
universe,
|
|
51
|
+
container: req.scope,
|
|
52
|
+
});
|
|
53
|
+
res.status(200).json({ permissions: Array.from(granted).sort() });
|
|
54
|
+
};
|
|
55
|
+
exports.GET = GET;
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3ZlbmRvci9yYmFjL21lL3Blcm1pc3Npb25zL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUk0QjtBQUM1QixxREFJa0M7QUFJbEM7Ozs7Ozs7Ozs7O0dBV0c7QUFDSSxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ3RCLEdBQStCLEVBQy9CLEdBQThDLEVBQzlDLEVBQUU7SUFDRixNQUFNLE9BQU8sR0FBSSxHQUFHLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFrQixJQUFJLEVBQUUsQ0FBQTtJQUV6RSxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUVoRSxNQUFNLFFBQVEsR0FBa0IsRUFBRSxDQUFBO0lBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUE7SUFFOUIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxRQUFpQixFQUFFLFNBQWtCLEVBQUUsRUFBRTtRQUN6RCxJQUNFLENBQUMsUUFBUTtZQUNULENBQUMsU0FBUztZQUNWLFFBQVEsS0FBSyxnQkFBUTtZQUNyQixTQUFTLEtBQUssZ0JBQVEsRUFDdEIsQ0FBQztZQUNELE9BQU07UUFDUixDQUFDO1FBRUQsTUFBTSxHQUFHLEdBQUcsR0FBRyxRQUFRLElBQUksU0FBUyxFQUFFLENBQUE7UUFFdEMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEIsT0FBTTtRQUNSLENBQUM7UUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFBO0lBQ3hDLENBQUMsQ0FBQTtJQUVELEtBQUssTUFBTSxVQUFVLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFNLENBQUMsRUFBRSxDQUFDO1FBQy9DLFFBQVEsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUN2RCxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLE1BQU0sRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDcEQsTUFBTSxFQUFFLGFBQWE7UUFDckIsTUFBTSxFQUFFLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQztLQUNsQyxDQUFDLENBQUE7SUFFRixLQUFLLE1BQU0sTUFBTSxJQUFJLGlCQUFpQixJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQzdDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUMvQyxDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFBLDhCQUFrQixFQUFDO1FBQ3ZDLEtBQUssRUFBRSxPQUFPO1FBQ2QsUUFBUTtRQUNSLFNBQVMsRUFBRSxHQUFHLENBQUMsS0FBSztLQUNyQixDQUFDLENBQUE7SUFFRixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUNuRSxDQUFDLENBQUE7QUFwRFksUUFBQSxHQUFHLE9Bb0RmIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mercurjs/core",
|
|
3
|
-
"version": "2.3.2-canary.
|
|
3
|
+
"version": "2.3.2-canary.3",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/mercurjs/mercur",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"@medusajs/medusa": "2.18.0",
|
|
61
61
|
"@medusajs/test-utils": "2.18.0",
|
|
62
62
|
"@medusajs/ui": "4.1.19",
|
|
63
|
-
"@mercurjs/types": "2.3.2-canary.
|
|
63
|
+
"@mercurjs/types": "2.3.2-canary.3",
|
|
64
64
|
"@swc/core": "^1.7.28",
|
|
65
65
|
"@types/cors": "^2.8.17",
|
|
66
66
|
"@types/express": "^4.17.21",
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"multer": "^2.0.2",
|
|
80
80
|
"http-proxy-middleware": "^3.0.3",
|
|
81
81
|
"jsonwebtoken": "^9.0.2",
|
|
82
|
-
"@mercurjs/cli": "2.3.2-canary.
|
|
82
|
+
"@mercurjs/cli": "2.3.2-canary.3"
|
|
83
83
|
},
|
|
84
84
|
"peerDependencies": {
|
|
85
85
|
"@medusajs/admin-sdk": ">=2.18.0",
|